В Django, как связать выпадающий список с данными из другой таблицы, используя внешний ключ?

#python #django #sqlite

Вопрос:

 model.py

class LabTable(models.Model):
    LabNo = models.AutoField(primary_key=True)
    Pid = models.IntegerField()
    Weight = models.IntegerField()
    DoctorId = models.ForeignKey(DoctorTable,on_delete=models.CASCADE)
    Date = models.DateField()
    Category = models.CharField(max_length=50)
    PatientType = models.CharField(max_length=50)
    Amount = models.IntegerField()

class DoctorTable(models.Model):
 DoctorId = models.AtuoField(primary_key = True) 
DoctorName = models.CharField(max_length = 50)
 Department = models.CharField(max_length = 100)
 

1. Здесь я создал лабораторную модель и внешний ключ с помощью doctor table. Я хочу использовать doctor table для представления данных в выпадающем списке.

Комментарии:

1. Не совсем понятно, что вы хотите сделать. Я предполагаю, что вы ищете пакет, подобный django-select2 .

2. Спасибо за предложение @WillemVanOnsem я пробовал это, но у меня это не сработало. На самом деле я ищу что-то, где я могу сохранить DoctorID в лабораторной таблице и хочу отобразить doctorName против этого DoctorID в выпадающем списке и в том же случае редактировать / обновлять запись.

3. Вы уже храните идентификатор доктора в Labtable, это то, что ForeignKey делает.

4. Да, но теперь проблема в том, что я получаю данные как объект в выпадающем списке, где мне нужно только doctorName

5. можете ли вы поделиться DoctorTable моделью?

Ответ №1:

Вы можете указать, как отображать DoctorTable объект модели, реализовав __str__ метод для этой модели, поэтому:

 class DoctorTable(models.Model):
    DoctorId = models.AutoField(primary_key=True)
    DoctorName = models.CharField(max_length=50)
    Department = models.CharField(max_length=100)

    def __str__(self):
        return self.DoctorName 

Примечание: обычно имена полей в модели Django записываются в snake_case, а не в PascalCase, поэтому оно должно быть: doctor_name вместо DoctorName .


Примечание: Модели обычно не имеют Table суффикса. Модель — это не таблица, она хранится в реляционной базе данных в виде таблицы, но даже тогда у нее есть дополнительная логика, такая как валидаторы, менеджеры и т. Д.

Комментарии:

1. Спасибо, я попробую это.