Как я могу заполнить поля иностранных ключей в админке django inline?
У меня есть группы сервисов и сервисы. Вместе они создают уникальное отношение GroupService, которое включает некоторые другие внешние ключи. Итак, в django admin, при создании группы, я хочу предварительно заполнить инлайн сервисов двумя идентификаторами сервисов по умолчанию. Я пытался переопределить BaseInlineFormSet для моего инлайна, но безуспешно.
Вот что я попробовал, теперь это дает мне KeyError: "Key 'id' not found in 'GroupServiceForm'. Choices are: counter, deduction, numerator, service."
. Когда я попытался реализовать это, используя self.empty_form
, я действительно преуспел в отображении правящих ключей служб по умолчанию, но не смог сохранить форму, даже если у меня были заполнены все поля.
class CustomInlineFormSet(BaseInlineFormSet):
def __init__(self, data=None, files=None, instance=None,
save_as_new=False, prefix=None, queryset=None, **kwargs):
super().__init__(data=data, files=files, instance=instance,
save_as_new=save_as_new, prefix=prefix,
queryset=queryset, **kwargs)
default_services = Service.objects.filter(
is_default=True).values_list('id', flat=True)
services = [form['service'].initial for form in self.forms]
for default_service in default_services:
if default_service not in services:
empty_form = self.form(initial={'id': 12, 'group': instance.id, 'service': default_service})
# empty_form.is_valid()
self.forms.append(empty_form)
class GroupServiceInline(CompactInline):
model = GroupService
fieldsets = (
(None, {'fields': ('service',)}),
('KPI', {'fields': ('counter', 'deduction', 'numerator')}),
)
formset = CustomInlineFormSet
extra = 2