回答:
モデルの名前を文字列としてForeignKeyに渡すことができ、それは正しいことを行います。
そう:
parent = models.ForeignKey("CategoryModel")
または、文字列「self」を使用できます
parent = models.ForeignKey("self")
文字列 'self'を使用して、自己参照を示すことができます。
class CategoryModel(models.Model):
parent = models.ForeignKey('self')
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
self
、モデルプロパティを定義するときに存在しないことです。プロパティが__init__()
またはメソッドの一部として定義されている場合self
は、Pythonクラスのインスタンスメソッドの最初の位置引数は常にそうです。
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)
または
class Employee(models.Model):
manager = models.ForeignKey("app.Employee", on_delete=models.CASCADE)
https://stackabuse.com/recursive-model-relationships-in-django/
parent
の代わりに、parentId
以来、my_category_model.parent
のインスタンスになりますCategoryModel
。Djangoはparent_id
、関連モデルの主キーとなるメンバーを自動的に作成します。