Отслеживайте объекты, созданные в дочерней модели, путем обновления родительской модели

У меня есть 2 модели Parent, Child

class Parent(models.Model):
    description = models.CharField(max_length=250, null=True, blank=True)
    child_list = models.CharField(max_length=250, null=True, blank=True)

class Child(models.Model):
    price = models.CharField(max_length=250, null=False, blank=False)

Мне нужно заполнять child_list каждый раз, когда создается объект Child

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

Я думал создать список с идентификаторами детей, но мне кажется, что это совсем не эффективно/элегантно.

<

Как сказал @dudulu, для этого можно использовать внешние ключи.

Пример:

class Faq(models.Model):
    name = models.CharField(max_length=255, default='none')
    email = models.CharField(max_length=255, default='none')
    subject = models.CharField(max_length=255, default='none')
    date = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.subject

    def get_absolute_url(self):
        return reverse("faq_detail", kwargs={"pk": self.pk})

class Answers(models.Model):
    faqs = models.ForeignKey(
        "Faq", on_delete=models.CASCADE, null=True, related_name='answers')
    detail = models.TextField()
    date = models.DateField(auto_now_add=True, null=True)

Или что-то подобное.

Этот сайт по внешним ключам очень помог мне, когда я пробовал сам.

Это должно быть то, что вы хотите, это самый простой пример.

Попробуйте погуглить пример django ForeignKey.

Первый

class Parent(models.Model):
    description = models.CharField(max_length=250, null=True, blank=True)


class Child(models.Model):
    price = models.CharField(max_length=250, null=False, blank=False)
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)

Первый для

for p in Parent.objects.all():
    print(f'count: {p.child_set.count()}')
    for child in p.child_set.all():
        print(f'child: price: {child.price}')

Секунда

class Child(models.Model):
    price = models.CharField(max_length=250, null=False, blank=False)
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE, related_name='custom_child')

Секунда для

for p in Parent.objects.all():
    print(f'count: {p.custom_child.count()}')
    for child in p.custom_child.all():
        print(f'child: price: {child.price}')
Вернуться на верх