Je suis un peu nouveau dans les applications Web et les bases de données en général, donc cela pourrait être une question stupide. Je veux créer un modèle ("CategoryModel") avec un champ qui pointe vers l'identifiant principal d'une autre instance du modèle (son parent).
class CategoryModel(models.Model):
parent = models.ForeignKey(CategoryModel)
Comment puis-je faire cela? Merci!
python
django
django-orm
sfendell
la source
la source
parent
au lieu deparentId
, puisque cemy_category_model.parent
sera une instance deCategoryModel
. Django créera automatiquement un membreparent_id
qui sera la clé primaire du modèle associé.Réponses:
Vous pouvez passer le nom d'un modèle sous forme de chaîne à ForeignKey et il fera ce qu'il faut.
Alors:
Ou vous pouvez utiliser la chaîne "self"
la source
Vous pouvez utiliser la chaîne «self» pour indiquer une auto-référence.
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
la source
self
n'est pas présent lors de la définition de la propriété du modèle. Si la propriété était définie dans le cadre de la__init__()
ou d'une autre méthode, ce serait, commeself
toujours, le premier argument de position de toute méthode d'instance d'une classe Python.https://books.agiliq.com/projects/django-orm-cookbook/en/latest/self_fk.html
OU
https://stackabuse.com/recursive-model-relationships-in-django/
la source
Vous devez également définir null = True et vide = True
null = True, pour autoriser dans la base de données
vide = True, pour autoriser la validation du formulaire
la source