web-dev-qa-db-fra.com

Django clé étrangère auto-référentielle

Je suis un peu novice dans les applications Web et les bases de données en général, alors c'est peut-être une question idiote. Je veux créer un modèle ("CategoryModel") avec un champ qui pointe vers l'identifiant primaire d'une autre instance du modèle (son parent).

class CategoryModel(models.Model):
    parentId = models.ForeignKey(CategoryModel)

Comment puis-je faire cela? Merci!

136
sfendell

Vous pouvez transmettre le nom d'un modèle sous forme de chaîne à ForeignKey et il agira comme il convient.

Alors:

parentId = models.ForeignKey("CategoryModel")

Ou vous pouvez utiliser la chaîne "self"

parentId = models.ForeignKey("self")
219
Jared Forsyth

Vous pouvez utiliser la chaîne 'self' pour indiquer une auto-référence.

class CategoryModel(models.Model):
    parentId = models.ForeignKey('self')

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

49
Brandon

https://books.agiliq.com/projects/Django-orm-cookbook/en/latest/self_fk.html

class Employee(models.Model):
    manager = models.ForeignKey('self', on_delete=models.CASCADE)

OR

class Employee(models.Model):
    manager = models.ForeignKey("app.Employee", on_delete=models.CASCADE)

https://stackabuse.com/recursive-model-relationships-in-Django/

1
Hailee