如何从属性中选择结果从Django模型组
问题描述:
我需要一些帮助,我不能弄清楚与Django(除非通过做蹩脚的嵌套)的问题。如何从属性中选择结果从Django模型组
我有这三种模式:
class Article(models.Model):
label = models.CharField(max_length=100)
unity = models.ForeignKey('Unity')
category = models.ForeignKey('Category')
user = models.ForeignKey(User)
class Store(models.Model):
label = models.CharField(max_length=100)
address = models.TextField()
products = models.ManyToManyField(Article, through='Offer')
user = models.ForeignKey(User)
class Offer(models.Model):
quantity = models.FloatField()
price = models.FloatField()
infos = models.TextField(blank=True)
article = models.ForeignKey('Article')
store = models.ForeignKey('Store')
user = models.ForeignKey(User)
我想打印一个表中我的模板,看起来想:
Article | Quantity | Infos | Store_1 | Store_2 | Store_n
------- | -------- | ----- | ------- | ------- | -------
Ham | 4 | Bla | 4.2 $ | 5.0 $ |
Ham | 6 | Bla | 6.0 $ | 7.5 $ |
相反,我只能设法拥有打印此:
Article | Quantity | Infos | Store_1 | Store_2 | Store_n
------- | -------- | ----- | ------- | ------- | -------
Ham | 4 | Bla | 4.2 $ | |
Ham | 6 | Bla | 6.0 $ | |
Ham | 4 | Bla | | 5.0 $ |
Ham | 6 | Bla | | 7.5 $ |
通过在视图中这样做:
articles = Article.objects.filter(user=request.user)
for article in articles:
article.offers = Offer.objects.filter(article=article)
,然后两个嵌套的模板:
{% for article in articles %}
{% for offer in article.offers %}
<tr>
...
</tr>
{% endfor %}
{% endfor %}
我能想到的唯一的办法是通过数量在视图中重新集结的报价,但蕴涵着大量的嵌套的,和我几乎肯定有更好的方式来做我想做的,但我找不到解决方案..
任何人都可以帮助我吗?非常感谢 !
答
一起使用串行关系应该可以帮助您实现更有效的方式你的目标,这些线路
东西:
class OfferSerializer(serializers.ModelSerializer):
class Meta:
model = Offer
fields = ('quantity', 'infos', 'store')
class ArticleSerializer(serializers.ModelSerializer):
offer = OfferSerializer()
class Meta:
model = BlogPost
fields = ('label', 'offer')
+0
如果我是正确的,ModelSerializer只适用于Django REST框架,我没有在我的项目中使用,有没有另一种方式? – Gemkodor
我想你shoudl看看这个串行关系:HTTP://www.django-rest- framework.org/api-guide/relations/ –
store_1,store_2和store_n来自哪里? –