Как сделать динамическое поле в Django models

Как я могу сделать поле Count, равное кол-ву привязанных к данному объекту модели Checks товаров из ManyToMany Field?

models.py:

class Tovar(models.Model):
    idtov = models.CharField("ID товара", max_length=30, default="default")
    name = models.CharField("Название товара", max_length=400, default="default")


    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Товар"
        verbose_name_plural = "Товары"
        ordering = ('id',)




class Checks(models.Model):
    iddoc = models.CharField("Id Чека", max_length=30)
    tovars = models.ManyToManyField("Tovar", verbose_name="Товары в чеке", related_name="tovar")
    createtime = models.DateTimeField("Дата", auto_now_add=True)
#   count = ...   Будем брать из ManyToMany
    summa = models.FloatField()


    def __str__(self):
        return f"Id чека: {self.iddoc}"

    class Meta:
        verbose_name = "Чек"
        verbose_name_plural = "Чеки"
        ordering = ("createtime",'id')

Мне нужно поле в Checks с кол-вом привязанных к данному объекту эл-ов модели Tovars.


Ответы (1 шт):

Автор решения: Nonen_Hook

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

Пример функции:

class Checks(models.Model):
# ваши поля...

    def tovars_count(self):
        return self.tovars.count()

Пример поля в админке:

list_fields=['tovars_count', ]
→ Ссылка