Django - Получение связанных объектов
Существуют такие модели:
class Nomenclature(models.Model):
nameNom = models.CharField(max_length=150,verbose_name = "Название номеклатуры")
numNom = models.CharField(max_length=50,verbose_name = "Номер номеклатуры",unique=True)
quantity = models.IntegerField(verbose_name="Количество", default=0)
numPolk = models.CharField(max_length=150,verbose_name = "Номер полки/места"
class Changes(models.Model):
numNomenclature = models.ForeignKey(Nomenclature, on_delete=models.CASCADE,related_name="chamges",verbose_name="Номер номеклатуры")
quantity = models.IntegerField(verbose_name="Количество",null=True)
location = models.CharField(max_length=50,verbose_name = "Место установки")
fullname = models.CharField(max_length=150,verbose_name = "ФИО")
appointment = models.CharField(max_length=50,verbose_name = "Назначение")
created_at = models.DateTimeField(auto_now_add=True,verbose_name='Дата/время', null=True)
Необходимо вывести название и номер номенклатуры и все связанные с ней изменения в шаблоне, а также вывести все поля
Я обнаружил, что select_related существует, но мне показалось, что он работает не так, как мне нужно.
Я не совсем уверен, что это то, что вам нужно.
Если вам нужно получить все изменения из одной модели "Номенклатура":
md = Nomenclature.objects.get(id=id) # Not sure how you fetch this, just an example.
all_changes_for_md = Changes.objects.filter(numNomenclature__id=md.id)
Это позволит получить все изменения для модели номенклатуры.
Также это можно сделать следующим образом:
md = Nomenclature.objects.get(id=id) # Not sure how you fetch this, just an example.
all_changes_for_md = md.chamges.all() # You made a typo in the related name.
Select related имеет другое назначение, он используется для предварительной выборки.
Из документации Django:
select_related(*fields)
. Возвращает QuerySet, который будет "следовать" за отношениями с иностранными ключами, выбирая дополнительные данные связанных объектов при выполнении запроса. Это повышает производительность, что приводит к одному более сложному запросу , но означает, что последующее использование отношений "иностранный ключ" не потребует запросов к базе данных.
https://docs.djangoproject.com/en/4.1/ref/models/querysets/#select-related