Определите, к какой модели принадлежит уникальное поле (первичный ключ) - PullRequest
0 голосов
/ 02 марта 2019

Я бы хотел с уникальным полем, чтобы получить название модели, к которой он принадлежит.Я пытался использовать get_model, но у него есть другая цель.

Предположим, что у вас есть школа с несколькими классами (каждый класс является моделью), и вы хотите найти ученика, используя только его удостоверение личности,получая название класса, в котором находится студент.

Таким образом, вы вводите идентификатор (первичный ключ), и функция вернет вам класс (модель), к которому принадлежит студент

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я хотел бы с уникальным полем получить имя модели, к которой он принадлежит.

Чтобы получить модель, к которой принадлежит поле, вы можете использовать model атрибут :

Возвращает модель, для которой определено поле.Если в суперклассе модели определено поле, model будет ссылаться на суперкласс, а не на класс экземпляра.

Выше ответит на ваш вопрос, но большая проблема связана сэто:

Предположим, что у вас есть школа с несколькими классами (каждый класс является моделью), и вы хотите найти ученика по его идентификационному номеру, получив название класса, в которомученик.

Это не устойчивая модель, и она вызовет проблемы, так как каждый класс означает новую таблицу.Эта структура вызовет у вас проблемы при поиске в учебных классах.

Вторая проблема заключается в том, что вы путаете значение поля с именем поля ,Первичный ключ (идентификатор) - это значение .Вы можете искать значения, если вы знаете, в каком поле они находятся, если вы хотите получить запись со значением первичного ключа 1, вы бы написали запрос следующим образом:

SELECT * FROM classroom_table WHERE id = 1

В Django этоэто Classroom.objects.get(id=1)

Вы не можете пойти другим путем, то есть "найти мне таблицу, которая имеет значение" 1 "в поле id" , чтоВы просите сделать это здесь.

Вам необходимо исправить структуру базы данных так, чтобы была одна модель для студентов и одна модель для класса;и студент может принадлежать ко многим классам:

class Student(models.Model):
   name = models.CharField(max_length=200)

class Classroom(models.Model):
   students = models.ManyToMany(Student)

Теперь вы можете делать такие вещи, как найти все классы для студента с идентификатором 1 :

student = Student.objects.get(id=1)
for room in student.classroom_set.all():
   print(room)
0 голосов
/ 02 марта 2019

Этот вопрос не очень понятен.

Если у вас есть модель Студента и модель Классной комнаты, и есть ForeignKey от Студента до Классной комнаты, то вам нужно получить студента из первичного ключа:

student = Student.objects.get(pk=my_pk_value)

, а затем получить свой класс:

student.classroom
...