Как получить доступ к родительской модели Django с помощью внешнего ключа
У меня эта модель:
class Cohort(models.Model):
id = models.AutoField(primary_key=True,editable=True)
origin=models.BooleanField(default=False)
title = models.CharField(max_length=200,validators=[MaxLengthValidator(100)])
email = models.ForeignKey(Userdata, on_delete=models.PROTECT,default='0',db_constraint=False)
def __str__(self):
return self.title
class Subcohort(models.Model):
cohort_id=models.ForeignKey(Cohort,on_delete=models.PROTECT,default=0,db_constraint=False,related_name='subcohortid')
parent_id=models.ForeignKey(Cohort,on_delete=models.PROTECT,default=0,db_constraint=False,related_name='subparentid')
Из файла views.py я хочу читать данные когортной модели, используя идентификатор когорты subcohort cohort_id. Я хочу получить объект, который содержит данные когорты вместе с данными подкорт. Может ли кто-нибудь помочь? Спасибо.
Не используйте суффикс _id для внешних ключей. Внешний ключ в Django - это объект, а не id. Django заботится о связях на уровне базы данных.
У Cohort
может быть несколько Subcohort
, но у Subcohort
может быть только один Cohort
родитель.
Вы можете получить все Subcohort
от Cohort
по родственному имени. Ваше связанное имя - subparentid
. Из которого, опять же, следует убрать суффикс 'id' и сделать его множественным, потому что когорта может иметь несколько подкогорт. Лучшее связанное_имя будет subcohorts
.
# using your models
cohort = Cohort.objects.get(pk=pk)
subcohorts = cohort.subparentid.all()
РЕДАКТИРОВАНИЕ:
Если у вас есть Subcohort
и вы хотите получить данные из его Cohort
, вы можете сделать так:
# using your models
subcohort = Subcohort.objects.get(pk=pk)
print(subcohort.parent_id.title) # prints the cohorts title