автоматическое добавление новых моделей на страницу администратора

#python #django

#python #django

Вопрос:

у меня есть приложение-калькулятор, внутри него у меня есть модели Transaction, Family_group, Family_member, см. Рисунок ниже. введите описание изображения здесь

я хочу, чтобы каждый раз, когда я пытаюсь совершить новую транзакцию, автоматически добавлялись 1 Family_group и Family_member по умолчанию, без того, чтобы я запускал их каждый раз. есть ли какой-нибудь способ сделать это? models.py

 class Transaction(models.Model):
   income_period_choices = (('Weekly', 'Weekly'), ('Fortnightly',
                                                'Fortnightly'))
   chp_reference = models.CharField(max_length=50, unique=True)
   rent_effective_date = models.DateField(null=True, blank=True)
   income_period = models.CharField(max_length=11,
                                 choices=income_period_choices,
                                 null=True,
                                 blank=True, default='Weekly')
   property_market_rent = models.DecimalField(help_text='Weekly',
                                           max_digits=7,
                                           decimal_places=2,
                                           null=True,
                                           blank=True)
class FamilyGroup(models.Model):
   name_choices = (('FG_1', 'FG_1'), ('FG_2',
                                   'FG_2'), ('FG_3', 'FG_3'), ('FG_4', 
                  'FG_4'), ('FG_5', 'FG_5'))
  name = models.CharField(max_length=10, choices=name_choices)
  transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE)
   family_type = models.ForeignKey(FamilySituation,
                                on_delete=models.PROTECT,
                                null=True,
                                blank=True)
class FamilyMember(models.Model):
   transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE)
   family_group = models.ForeignKey(FamilyGroup,
                                 on_delete=models.CASCADE,
                                 null=True,
                                 blank=True)
   name = models.CharField(max_length=100, null=True, blank=True)
   date_of_birth = models.DateField(null=True, blank=True)
   relationship = models.ForeignKey(Relationship, on_delete=models.PROTECT)
 

Ответ №1:

Не видя вашего кода, трудно помочь, но это может помочь вам начать:

Вы можете переопределить save метод для Transaction модели следующим образом:

 class Transaction(models.Model):

    ...

    def save(self, *args, **kwargs):

        # add / create family group if it is missing:
        if not self.family_group:
            self.family_group = <the Family_group instance>

            # add / create family member if it is missing:
            if not self.family_group.family_member_set.all()
                self.family_group.add([<the Family_member instance>])
                self.family_group.save()

        return super(Transaction, self).save(*args, **kwargs)
 

Комментарии:

1. я добавил models.py пожалуйста, посмотрите, как я могу использовать self.family_group в модели транзакций?

2. Можно просто вставить этого парня в первый оператор if — см. Редактирование. Вам нужно будет добавить свою собственную логику для того, когда Family_group или Family_member должен быть добавлен, создан, просмотрен и т.д.

3. это дает мне синтаксическую ошибку при первом утверждении if. family_group — это что? существует модель FamilyGroup .