django 默认查询条件_Django ModelChoiceField:过滤查询集并将默认值设置为对象

Django ModelChoiceField:过滤查询集并将默认值设置为对象

我有一个Django Form类定义喜欢这在Models :

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

这工作正常,但它有一些限制,我似乎无法解决:

(1)我想对查询集使用一个filter,基于一个variablesaccountid传递给窗体,如下所示:

User.objects.filter(account=accountid)

这在模型中不起作用,因为accountid当然不能作为variables传递。

因此,查询集必须以某种方式在Views定义,但据我所知,它是Form类中的必需字段。

(2)我想使AccountDetailsForm的默认select在数据库中的一个对象,我可以在这样的Viewsselect:

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

我已经尝试指定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以外的其他function吗?

谢谢。

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

被警告:你不是通过传递一个字典到像你的例子一样的forms来设置默认值。

你实际上正在创build一个绑定表单,可能触发validation和所有的爵士乐。

要设置默认值,请使用initials参数。

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

您可以覆盖视图中的字段

yourForm = AccountDetailsForm() yourForm.fields['accomodation'] = forms.ModelChoiceField(User.objects.filter(account=accountid).filter(primary_user=1))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值