Jestem trochę nowy w aplikacjach internetowych i ogólnie rzeczach z bazami danych, więc może to być głupie pytanie. Chcę utworzyć model („CategoryModel”) z polem wskazującym na podstawowy identyfikator innego wystąpienia modelu (jego elementu nadrzędnego).
class CategoryModel(models.Model):
parent = models.ForeignKey(CategoryModel)
Jak mam to zrobic? Dzięki!
python
django
django-orm
sfendell
źródło
źródło
parent
zamiastparentId
, ponieważmy_category_model.parent
będzie to przykładCategoryModel
. Django automatycznie utworzyparent_id
składową, która będzie kluczem podstawowym powiązanego modelu.Odpowiedzi:
Możesz przekazać nazwę modelu jako ciąg do ForeignKey i zrobi to dobrze.
Więc:
Możesz też użyć ciągu „siebie”
źródło
Możesz użyć ciągu „self”, aby wskazać odniesienie do siebie.
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
źródło
self
nie występuje podczas definiowania właściwości modelu. Gdyby właściwość została zdefiniowana jako część metody__init__()
lub innej metody, byłby to, jakself
zawsze, pierwszy argument pozycyjny dowolnej metody instancji klasy Pythona.https://books.agiliq.com/projects/django-orm-cookbook/en/latest/self_fk.html
LUB
https://stackabuse.com/recursive-model-relationships-in-django/
źródło
Możesz także ustawić null = True i blank = True
null = True, aby zezwolić w bazie danych na
puste = True, aby zezwolić na walidację formularza
źródło