Отслеживайте объекты, созданные в дочерней модели, путем обновления родительской модели
У меня есть 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}')