FormClass中的用户

2024-06-16 14:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的表格:

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

在我看来:

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

现在,我想添加一个表单字段,它在select字段中包含一组值,并且queryset必须由当前登录的用户过滤。因此,我更改了方法签名,使其包含请求对象:

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小部件。我觉得表单域一旦声明就不能修改。你知道吗

有什么想法吗?你知道吗


Tags: 对象selfform表单getinitrequestargs
2条回答

将最后一行代码替换为:

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

我想你想要的是:

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))

假设MyModel__unicode__方法返回self.name。 如果不是这种情况,那么可以将ModelChoiceField子类化并重写label_from_instance方法。你知道吗

相关问题 更多 >