我在Models中定义了一个Django窗体类,如下所示:

class AccountDetailsForm(forms.Form):
    ...
    adminuser = forms.ModelChoiceField(queryset=User.objects.all())

这很管用,但它有一些我无法克服的局限性:

(1) 我想在queryset上使用一个过滤器,基于传递给表单的变量accountid,如下所示:

User.objects.filter(account=accountid)

这在模型中是行不通的,因为当然,accountid不能作为变量传递.

因此,必须以某种方式在Views中定义queryset,但据我所知,它是Form类中的必填字段.

(2)我想在数据库中默认 Select AccountDetailsForm作为对象,我可以在Views中 Select ,如下所示:

User.objects.filter(account=accountid).filter(primary_user=1)

我try 将adminuser指定为表单中的默认值(适用于其他标准表单域,如CharField):

adminuser = User.objects.filter(account=accountid).filter(primary_user=1)

...

form = AccountDetailsForm({'adminuser': adminuser})
return render_to_response('accounts/edit/accountdetails.html', 
{'form': form, 'account':account})

但是没有运气.

考虑到我在这里需要的灵活性,我应该使用ModelChoiceField以外的东西吗?

谢谢你.

推荐答案

重写init方法并接受新的关键字参数

class AccountDetailsForm(forms.Form):
    ...
    adminuser = forms.ModelChoiceField(queryset=User.objects.all())
    def __init__(self, *args, **kwargs):
        accountid = kwargs.pop('accountid', None)
        super(AccountDetailsForm, self).__init__(*args, **kwargs)

        if accountid:
            self.fields['adminuser'].queryset = User.objects.filter(account=accountid)

form = AccountDetailsForm(accountid=3)

您也可以随时在视图中手动设置选项.

form = AccountDetailsForm()
form.fields['adminuser'].queryset = User.objects.filter(account=accountid)

请注意:通过将字典传递给示例中的表单,您正在not设置默认值.

您实际上正在创建一个绑定的表单,这可能会触发验证和所有这些问题.

要设置默认值,请按use the initials argument.

form = AccountDetailsForm(initial={'adminuser':'3'})

Django相关问答推荐

Django REST framework:object has no attributed after annotation;Got attributeError when try to get a value for field field on serializer<>

Django-将html数据保存到quillfield中

如何在Django模板中为无效词典查找打开异常?

新的 Django 开发人员无法在网站上显示Hello World,而不是默认安装成功页面

如何从基于类的视图将用户保存在 django 模型中

Django中的InvalidOperation错误[]

如何根据状态计算表中数据的数量?

如何在 Django REST Framework API 响应中使用多标签过滤器?

lower() 在 None 上被调用

Django:使用相同的外键在不同的应用程序中 Select 多个列

Django 在模型中存储用户图像

Django rest框架覆盖ViewSet中的page_size

django 用一个提交按钮提交两种不同的表单

通过 django shell 保存图像/文件

在 django 模板中遇到 user.is_authenticated 问题

django excel xlwt

Django:访问给定字段的 Select 元组

在 Django 中使用 AuthenticationForm

Django:如何在视图中获取格式日期?

Django - 了解 X-Sendfile