[python] 장고 자기 참조 외래 키

나는 일반적으로 webapps 및 데이터베이스에 익숙하지 않으므로 이것이 멍청한 질문 일 수 있습니다. 모델의 다른 인스턴스 (부모)의 기본 ID를 가리키는 필드로 모델 ( “CategoryModel”)을 만들고 싶습니다.

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

어떻게해야합니까? 감사!



답변

모델 이름을 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


답변

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/


답변

또한 null = True 및 blank = True를 설정해야합니다.

class CategoryModel(models.Model):
    parent = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True)

null = True, 데이터베이스에서 허용
blank = True, 양식 유효성 검사에서 허용


답변