-1
votes

L'objet n'a aucun attribut 'entrée_set' 'erreur

Je suis nouveau à Python, en essayant de travailler à travers le cours d'accident de Python et j'ai rencontré un problème que je ne peux pas comprendre. Voici mon erreur:

'pizza' objet n'a aucun attribut 'entrée_set' strong> p>

dans mon modèle, j'ai la clé étrangère définie à la pizza dans les garnitures et cela fonctionne bien, mais Je ne comprends apparemment pas la définition entrée_set_set code>. P>

Voici mon code d'URL: p> xxx pré>

Voici mon code de vue (comme Vous pouvez voir, j'ai le entrée_set_set code>): p> xxx pré>

et enfin, mon code HTML: p>

from django.db import models


class Pizza(models.Model):
    """Pizza names """
    name = models.CharField(max_length=50)

    def __str__(self):
        """Return a string representation of the model"""
        return self.name


class Toppings(models.Model):
    """Pizza toppings """
    pizza = models.ForeignKey(Pizza, on_delete=models.DO_NOTHING)
    topping = models.CharField(max_length=50)

    def __str__(self):
        """Return a string representation of the model"""
        return self.topping


3 commentaires

docs.djangoproject.com/fr/dev/topics/db / Queries / ... pourrait être utile


Pourriez-vous nous montrer la définition de la pizza dans le code?


Sûr! C'est ici, Helena.


3 Réponses :


0
votes

Je ne sais pas pourquoi vous penseriez qu'il devrait avoir un entrée_se_set . Le seul modèle relatif à la pizza est en tête de tête et vous n'avez pas défini de nom CUSTOMN_NAME sur le FoundanyKey, une pizza a donc un topping_set . . .


2 commentaires

Je viens de rechercher "lié_name" et a constaté que si ce n'est pas défini, Python prend le nom du modèle et en crée un. Alors, cela signifie-t-il que je devrais utiliser pizza_set? J'ai essayé cela et ça n'a pas fonctionné non plus, "pizza 'objet n'a aucun attribut" pizza_set ". Peut-être que je vais essayer d'ajouter un nom associé même que je ne devrais pas en avoir besoin.


Non, je t'ai dit ce qu'il était: topping_set . Le nom associé fait référence à la relation inverse. Une pizza a un ensemble de garnitures, pas un ensemble de pizzas ou d'entrées.



1
votes

Le modèle de pizza et de garniture a une relation plusieurs à une. C'est ce qu'est une relation "fournedication". Il existe deux tables différentes (parmi beaucoup d'autres) dans votre base de données. Un pour la pizza et une pour les garnitures. Quelle relation d'entreprise d'entreprise a mis une colonne dans votre table de garniture qui pointe vers une rangée de votre table de pizza. C'est un moyen d'associer les entrées dans ces tables l'une à l'autre.

Si vous avez une instance de garniture: p> xxx pré>

retourne la pizza. P>

Ce que vous demandez est de savoir comment aller dans l'autre sens. Avoir une instance de pizza, puis obtenir les garnitures. Pour obtenir toutes les lignes de votre table de garnitures avec une colonne de pizza qui pointe sur une instance de pizza. P>

Il y a quelque chose dans Django appelé un nom associé que vous pouvez le définir comme tel: p> xxx pré>

avec ce que vous pouvez alors faire ceci: p> xxx pré>

Pour retourner toutes les garnitures sur l'après-midi_pizza. Le nom associé par défaut est le "nom_of_your_model" + '_set'. Donc, sans la modification ci-dessus, vous pouvez obtenir les mêmes résultats avec: P>

afternoon_pizza.toppings_set.all()


1 commentaires

Merci, art. C'est une excellente explication. Et vous avez raison, l'exemple dans le livre a un champ appelé "entrée". Devinez que c'est pourquoi je n'ai pas pu trouver "entrée_set" dans Google! MDR



0
votes

Le problème est que vous utilisez entrée_set dans cette ligne: xxx

et vous devez utiliser foo_set foo est le nom de la classe (par exemple, topping ?) En minuscule xxx < / p>


0 commentaires