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 Voici mon code d'URL: p> Voici mon code de vue (comme Vous pouvez voir, j'ai le et enfin, mon code HTML: p> entrée_set_set code>. P>
entrée_set_set code>): 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 Réponses :
Je ne sais pas pourquoi vous penseriez qu'il devrait avoir un entrée_se_set code>. Le seul modèle relatif à la pizza est en tête de tête et vous n'avez pas défini de nom code> CUSTOMN_NAME CODE> sur le FoundanyKey, une pizza a donc un
topping_set code>. P>. P>.
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 code>. 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.
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> 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> 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()
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
Le problème est que vous utilisez et vous devez utiliser
entrée_set code> dans cette ligne:
foo_set code> où
foo code> est le nom de la classe (par exemple,
topping code>?) En minuscule p>
docs.djangoproject.com/fr/dev/topics/db / Queries / ... pourrait être utile
Pourriez-vous nous montrer
la définition code> de la pizza dans le code?
Sûr! C'est ici, Helena.