2017-10-07 3 views
0

Je pense que cette question a déjà été posée plusieurs fois, mais les questions et leurs réponses ne sont pas très claires. Si vous pouvez préciser la question ou l'exemple ci-dessous. S'il vous plaît faire.Django Comment obtenez-vous le champ d'un autre modèle dans une vue?

Exemple: J'ai un verger, dans mon verger j'ai des champs de pommiers et ces pommiers ont des pommes. La question utilise mes modèles:

  1. comment puis-je obtenir le nombre de pommes dans un domaine donné?
  2. masse totale de toutes les pommes produites dans ce champ donné?

Modèle

class Field(models.Model): 
    size = models.PositiveIntergerField() 
    max_tree_number = models.PositiveIntergerField() 

class Tree(models.Model): 
    field = models.ForeignKey(Field) 
    date_of_planting = models.datefield(editable=False) 
    variety = models.CharField(max_length=200) 

class Apple(models.Model): 
    tree = models.ForeignKey(Tree) 
    mass = models.PositiveIntergerField() 

Voir

class FieldView(generic.ListView): 
    template = '[app_name]/index.html' 

    def get_context_data(self, **kwargs): 
     context = super(FieldView, self).get_context_data(**kwargs) 
     context['tree_count'] = Field._meta.model_name 
     context['mass'] = ??? 
     context['apple_count'] = ??? 

Merci pour votre temps

Répondre

2

Vous pouvez annotate votre queryset avec le nombre de pommes et de masse. Ensuite, lorsque vous parcourez le jeu de queues, vous pouvez accéder aux champs annotés.

{% for obj in object_list %} 
    {{ obj.size }}, {{ obj.num_apples }}, {{ obj.apple_mass }} 
{% endfor %} 

Notez que vous n'avez pas eu à ajouter quoi que ce soit au contexte dans get_context_data, de sorte que vous pourriez être en mesure de le retirer de votre point de vue.

+0

Nous vous remercions de votre aide, mais j'ai des problèmes avec self.object. >> AttributeError: L'objet 'FIELDVIEW' n'a pas d'attribut 'objet'. Ai-je manqué quelque chose d'évident? – TheSadPrinter

+0

Désolé, j'ai mal lu votre question avant et pensé que vous aviez une vue détaillée pour un verger particulier. Quel verger voulez-vous connaître les résultats? Chaque verger dans la liste? – Alasdair

+0

L'objectif final est d'avoir une page. Avec le champ avec le nombre de pommes à côté de lui. >> Champ. Pommes. >> Field1 100 >> field2 200 >> ainsi de suite ... Vous avez totalement raison ce que j'ai demandé, mais self.object ne renvoie pas un objet. Je me demandais simplement s'il me manquait des lignes clés de code pour y arriver. – TheSadPrinter