使用Django ModelChoice字段创建下拉到查找表?

时间:2013-02-15 18:44:00

标签: django django-models django-forms

我正在尝试使用ModelChoiceField字段在“客户结算信息”表单中实现包含国家/地区名称列表的下拉字段。但是,当我尝试渲染表单时,我得到“AttributeError,'str'对象没有属性'all'”,我不知道是什么导致它。

我有一个包含国家/地区代码和名称的查找表:

# models.py
from django.db import models
class Country(models.Model):
    # Ex: code = 'us', name = 'United States'
    country_cd = models.CharField(max_length=2)
    name = models.CharField(max_length=40)

然后,我有一个客户模型和关联的客户账单信息模型,其中包含指向上述查找表的外键字段:

# models.py
class Customer(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    country = models.ForeignKey(Country)
    # Other fields...

# forms.py
from django import forms
from app.models import Customer, Country
class CustomerBillingInfoForm(forms.ModelForm):
    class Meta:
        model = Customer
        fields = ('country',)

    country = forms.ModelChoiceField(queryset='Country.objects.all()', empty_label=None)

我在调试器中运行它,并且“type(country)”确实显示它是一个QuerySet并且“Country.objects.all()”正在返回我的“country”数据库中的所有国家/地区。堆栈跟踪表示错误是在'ModelChoiceIterator'类中的/django/forms/models.py模块(Django v.1.4)的第896行引发的。

有谁看到我在这里做错了什么?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

变化:

country = forms.ModelChoiceField(queryset='Country.objects.all()',
    empty_label=None)

为:

country = forms.ModelChoiceField(queryset=Country.objects.all(),
    empty_label=None)