使用Kwargs的Django Form Init键错误

时间:2015-10-18 07:53:04

标签: python django

我试图覆盖此表单上的 init 方法。它看起来像这样:

def __init__(self, *args, **kwargs):
    fr = None
    if kwargs.get('friend', False):
        fr = Friend.objects.get(pk=kwargs.get('friend'))
    super(CreateFriendForm, self).__init__(*args, **kwargs)

    self.fields["{}_house".format(fr.name)] = forms.ModelChoiceField(queryset=Houses.objects.all(), required=False)

所以,我想抓住朋友kwargs并按照你上面的说法使用它。根据朋友的传递,我会添加一个字段。在我的测试中,我传递了以下数据:

    data = {
        "user": self.user.pk,
        "friend": self.friend.pk,
        "language": 'en'
    }
    friend = self.form(data)
    # Validity
    self.assertTrue(friend.is_valid())
    friend.save()

但是,我收到一条错误消息,指出有一个关键错误:

if kwargs.get('friend', False):

我传递了必要的数据(朋友,用户等),但它似乎并不在kwargs中。这里的问题是什么?感谢。

1 个答案:

答案 0 :(得分:1)

问题是我将数据作为arg而不是作为kwarg传递到表单中。改变:

friend = self.form(data)

为:

friend = self.form(data=data)

修正了我遇到的主要问题。