如何从属性中选择结果从Django模型组

如何从属性中选择结果从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 %} 

我能想到的唯一的办法是通过数量在视图中重新集结的报价,但蕴涵着大量的嵌套的,和我几乎肯定有更好的方式来做我想做的,但我找不到解决方案..

任何人都可以帮助我吗?非常感谢 !

+0

我想你shoudl看看这个串行关系:HTTP://www.django-rest- framework.org/api-guide/relations/ –

+0

store_1,store_2和store_n来自哪里? –

一起使用串行关系应该可以帮助您实现更有效的方式你的目标,这些线路

东西:

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