Как получить значение ForeignKey в файле views.py?
У меня есть нижеприведенные models.py и views.py в Django. Как я могу вывести значение ForeignKey в views.py?
models.py
class student(models.Model):
name = models.CharField(max_length=50)
desc = models.CharField(max_length=100, blank=True, null=True)
phone_number = models.ForeignKey(tell,on_delete=models.SET_NULL, null = True,blank=True)
def __str__(self):
return self.name
class tell(models.Model):
phone_number = models.CharField(max_length=20, blank=True, null=True)
def __str__(self):
return self.phone_number
views.py
phones = student.objects.values('phone_number')
phone = list(phones)
for ob in phone:
print(ob)
Это выводит только id
, но мне нужно значение внешнего ключа.
Это одна из (многих) причин не использовать .values(…)
[Django-doc]: она разрушает логический слой модели Django.
Вы можете работать с:
tell.objects.filter(student__isnull=False)
в результате будут получены все tell
объекты, у которых есть хотя бы один связанный Student
.
Вы также можете использовать .select_related(…)
[Django-doc] для выбора номера телефона при извлечении student
s, и таким образом избежать N+1 проблемы:
students = student.objects.select_related('phone_number'):
for stud in students:
print(stud.phone_number)
Если вы действительно хотите работать с phone_number
моделью tell
, вы можете работать с .values_list(…)
[Django-doc], и работать с:
phones = student.objects.values_list('phone_number__phone_number', flat=True)
for phone in phones:
print(phone)
но это, таким образом, не tell
объекты, и поэтому обновление, refrehing, запись невозможны в этом случае.