Django:ModelForm的kwargs

时间:2018-05-05 13:54:28

标签: python django

我必须使用名为EventRegistration的模型。在这里,您可以看到我的admin.py

    class RegistrationInline(admin.StackedInline):
    model = Registration
    form = RegistrationForm # inherits from ModelForm

    def has_add_permission(self, request):
        return False


@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
    form = EventForm

    inlines = [RegistrationInline]

在我RegistrationForm我有这个,因为我需要事件的pk:

def __init__(self, *args, **kwargs):
    self.event = kwargs.get('instance').event # In my Registration model "Event" is a ForeignKey
    super().__init__(*args, **kwargs)

当我进入管理员并参加活动时,kwargs的输出为:

{'auto_id': 'id_%s', 'prefix': 'registration_set-0', 'error_class': <class 'django.forms.utils.ErrorList'>, 'use_required_attribute': False, 'instance': <Registration: 1>}
{'auto_id': 'id_%s', 'prefix': 'registration_set-1', 'error_class': <class 'django.forms.utils.ErrorList'>, 'use_required_attribute': False, 'instance': <Registration: 2>}
{'auto_id': 'id_%s', 'prefix': 'registration_set-2', 'error_class': <class 'django.forms.utils.ErrorList'>, 'use_required_attribute': False, 'instance': <Registration: 3>}
{'auto_id': 'id_%s', 'prefix': 'registration_set-3', 'error_class': <class 'django.forms.utils.ErrorList'>, 'use_required_attribute': False, 'instance': <Registration: 4>}
{'auto_id': 'id_%s', 'prefix': 'registration_set-__prefix__', 'empty_permitted': True, 'use_required_attribute': False}
{'auto_id': 'id_%s', 'prefix': 'registration_set-__prefix__', 'empty_permitted': True, 'use_required_attribute': False}
{'auto_id': 'id_%s', 'prefix': 'registration_set-__prefix__', 'empty_permitted': True, 'use_required_attribute': False}

我的问题是最后三行。因为没有instance我的方法不起作用。如何删除这三行或这三行是什么意思?

1 个答案:

答案 0 :(得分:0)

这里没有问题;这些只是Django默认在formset中添加的三个额外的空白表单。您应该检查参数是否通过:

instance = kwargs.get('instance')
if instance is not None:
    self.event = instance.event