2017-09-26 2 views
0

J'ai besoin d'aide pour résoudre un problème que je n'arrive pas à résoudre avec Django (à moins de le faire en nid).Comment sélectionner les résultats du groupe de modèles django par un attribut

J'ai ces trois modèles:

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) 

Je voudrais imprimer une table dans mon modèle qui serait ressemble à:

Article | Quantity | Infos | Store_1 | Store_2 | Store_n 
------- | -------- | ----- | ------- | ------- | ------- 
Ham  | 4  | Bla | 4.2 $ | 5.0 $ | 
Ham  | 6  | Bla | 6.0 $ | 7.5 $ | 

Au lieu de cela, je ne réussi à avoir cette impression:

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 $ | 

en faisant cela dans la vue:

articles = Article.objects.filter(user=request.user) 
for article in articles: 
    article.offers = Offer.objects.filter(article=article) 

puis deux imbriqué dans le modèle:

{% for article in articles %} 
    {% for offer in article.offers %} 
     <tr> 
      ... 
     </tr> 
    {% endfor %} 
{% endfor %} 

La seule solution que je peux penser est de regrouper les offres en quantité dans la vue, mais cela implique beaucoup de imbriqué pour et i Suis presque sûr qu'il ya une meilleure façon de faire ce que je veux, mais je ne peux pas trouver la solution ..

Quelqu'un peut-il m'aider avec cela? Merci beaucoup !

+0

Je pense que vous regardez dans les relations d'hôtel devrait de sérialiseur pour ceci: http: //www.django-rest- framework.org/api-guide/relations/ –

+0

D'où viennent les magasins store_1, store_2 et store_n? –

Répondre

0

Quelque chose le long de ces lignes à l'aide des relations sérialiseur devrait vous aider à atteindre votre objectif d'une manière plus efficace:

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

Si j'ai raison, ModelSerializer n'est disponible qu'avec Django REST Framework que je n'utilise pas dans mon projet, existe-t-il un autre moyen? – Gemkodor