Как получить значение 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] для выбора номера телефона при извлечении students, и таким образом избежать 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, запись невозможны в этом случае.

Вернуться на верх