#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 .