Reputation: 5595
I'm kind of new to webapps and database stuff in general so this might be a dumb question. I want to make a model ("CategoryModel") with a field that points to the primary id of another instance of the model (its parent).
class CategoryModel(models.Model):
parent = models.ForeignKey(CategoryModel)
How do I do this? Thanks!
Upvotes: 235
Views: 113410
Reputation: 13162
You can pass in the name of a model as a string to ForeignKey
and it will do the right thing.
So:
parent = models.ForeignKey("CategoryModel")
Or you can use the string "self"
parent = models.ForeignKey("self")
Upvotes: 373
Reputation: 8021
You also to set null=True
and blank=True
class CategoryModel(models.Model):
parent = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True)
null=True
, to allow in database
blank=True
, to allow in form validation
Upvotes: 23
Reputation: 34553
You can use the string 'self' to indicate a self-reference.
class CategoryModel(models.Model):
parent = models.ForeignKey('self')
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
Upvotes: 80
Reputation: 328
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/
Upvotes: 9