python - 在 Django 上更改 ModelChoiceField 的查询集

标签 python django django-forms

我正在尝试显示一个下拉列表,该下拉列表仅显示查询集中的某些对象,但要么出现错误,要么不显示任何对象,要么显示所有对象。

models.py
class Book(models.Model):
    name = models.CharField(max_length=200, default='')
    owner = models.CharField(max_length=200, default='') 

    def __unicode__(self):
        return self.name

class DropDownList(forms.Form):
    switch = forms.ModelChoiceField(queryset=Book.objects.none().order_by('name'), widget=forms.Select(attrs={"onChange":'submit()'}), required=False, initial=0)

    def __init__(self, u, *args, **kwargs):
        super(DropDownList, self).__init__(*args, **kwargs)    
        self.fields['switch'].queryset = Book.objects.filter(owner = u)


views.py
d = DropDownList('anthony')

当我尝试同步数据库时,我得到:“NameError: name 'u' is not defined 我尝试使用 get(Q(owner = u)) 等其他方法进行过滤,但无济于事。 我正在关注此片段中的信息 http://djangosnippets.org/snippets/2481/ 当我没有过滤其中包含的项目时,下拉列表正确显示。

最佳答案

检查你的代码:

  1. 如果您覆盖了 __init__ 方法,请不要忘记调用 super(...).__init__:

    class DropDownList(forms.Form):
        switch = forms.ModelChoiceField(queryset=Book.objects.none().order_by('name'), widget=forms.Select(attrs={"onChange": 'submit()'}), required=False, initial=0)
    
        def __init__(self, u, *args, **kwargs):
            super(DropDownList, self).__init__(*args, **kwargs)
            self.fields['switch'].queryset = Book.objects.filter(owner=u)
    
  2. 可能只是问题中的错误输入,但可以肯定的是,您使用的是 max_length arg,而不是 max_lenght:

    class Book(models.Model):
        name = models.CharField(max_length=200, default='')
        owner = models.CharField(max_length=200, default='')
    
        def __unicode__(self):
            return self.name
    

关于python - 在 Django 上更改 ModelChoiceField 的查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538079/

相关文章:

python - 重新调整绘图的一个轴的大小

python 错误?惰性对象具有隐藏状态

50,000,000 个字符数据的 Django textarea

django - Django 上的views.py 中的密码不要更改

django - 使成功消息在 django 表单提交几秒钟后消失并显示空表单

python - 使用 Pandas Series 修改 Pandas Multi-Index DataFrame 值

python - GEKKO 中的 FOPDT 方程组 - 使用多个输入

python - Python 企业平台、设计建议

python - django-post_office - 使用基于文件而不是基于数据库的电子邮件模板

python - 特定数据库中的 Django 模型形式 is_valid()