用户在Form-Class中

时间:2009-07-28 09:53:46

标签: python django

我有一个这样的表格:

class MyForm(forms.Form):
[...]

在我的视图中呈现:

if request.method == 'GET':
    form = MyForm(request.GET)

现在,我想在select-field中添加一个包含一组值的表单字段,并且必须由当前登录的用户过滤查询集。所以我更改了方法签名,使其包含request-object:

class MyForm(forms.Form):
    def __init__(self, user, *args, **kwargs):
         super(MyForm, self).__init__(*args, **kwargs)
         self.myfield  = forms.ChoiceField([('%s' % d.id, '%s' % d.name) for d in MyModel.objects.filter(owners = user)])

但是我在渲染表单后得到的是一个对象引用作为字符串而不是select-widget。我似乎一旦声明了表单字段,就无法修改。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

用以下代码替换你的最后一行代码:

self.fields['myfield'].choices = [('%s' % d.id, '%s' % d.name) for d in MyModel.objects.filter(owners = user)]

答案 1 :(得分:0)

我认为这就是你所追求的目标:

class MyForm(forms.Form):
    def __init__(self, user, *args, **kwargs):
         super(MyForm, self).__init__(*args, **kwargs)
         self.fields['myfield']  = forms.ModelChoiceField(MyModel.objects.filter(owners=user))

假设__unicode__的{​​{1}}方法返回MyModel。 如果此不是的情况,那么您可以继承self.name并覆盖ModelChoiceField方法。