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!
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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")
Method 2
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
Method 3
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
Method 4
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/
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0