У меня есть две родственные модели: Plaint
и WritOfExecutionTemplate
.Можно добавить новый шаблон на странице редактирования текста, используя класс admin.TabularInline
.Когда пользователь создает новый шаблон со страницы жалоб, мне нужно заполнить 2 поля доверенности (POA) на основе текущей жалобы.Пользователь может изменить POA до того, как шаблон будет сохранен.
Я попытался установить метод обратного вызова для атрибута default
поля, но у меня естьпроблема с получением объекта-ссылки.
class AbstractGeneratedCaseDocument(AbstractBaseModel):
class Meta:
abstract = True
case = models.ForeignKey(
verbose_name=_('case'),
to='Case',
on_delete=models.PROTECT,
)
power_of_attorney = models.ForeignKey(
verbose_name=_('power of attorney'),
to='ImportedDocument',
on_delete=models.PROTECT,
null=True,
blank=True,
related_name='+',
)
power_of_attorney_2 = models.ForeignKey(
verbose_name=_('power of attorney') + ' 2',
to='ImportedDocument',
on_delete=models.PROTECT,
null=True,
blank=True,
related_name='+',
)
class Plaint(AbstractGeneratedCaseDocument):
pass
class WritOfExecutionTemplate(AbstractBaseModel, WhoDidItMixin):
plaint = models.ForeignKey(
to='Plaint',
verbose_name=_('plaint'),
on_delete=models.PROTECT
)
def get_poa1_from_plaint(self):
if (self.plaint.power_of_attorney is not None
and self.plaint.case.plaintiff_representative == self.plaint.power_of_attorney.relative_person):
poa = self.plaint.power_of_attorney
else:
poa = None
return poa
def get_poa2_from_plaint(self):
# The same as for the first power of attorney
if (self.plaint.power_of_attorney_2 is not None
and self.plaint.case.plaintiff_representative == self.plaint.power_of_attorney_2.relative_person):
poa = self.plaint.power_of_attorney_2
else:
poa = None
return poa
power_of_attorney = models.ForeignKey(
verbose_name=_('power of attorney'),
to='ImportedDocument',
on_delete=models.PROTECT,
#null=True,
#blank=True,
related_name='+',
default=get_poa1_from_plaint,
)
power_of_attorney_2 = models.ForeignKey(
verbose_name=_('power of attorney') + ' 2',
to='ImportedDocument',
on_delete=models.PROTECT,
null=True,
blank=True,
related_name='+',
default=get_poa2_from_plaint
)
Модель администратора:
class WritOfExecutionTemplateAdminInline(admin.TabularInline):
model = WritOfExecutionTemplate
class PlaintAdmin(admin.ModelAdmin):
inlines = (
WritOfExecutionTemplateAdminInline,
)
Сообщение об ошибке:
get_poa1_from_plaint () отсутствует 1 обязательный позиционный аргумент: 'self'
Как правильно сделать то, что мне нужно?