1

我正在尝试使用 ModelChoiceField 字段实现一个下拉字段,该字段包含客户帐单信息表单中的国家/地区名称列表。但是,当我尝试渲染表单时,我得到“AttributeError,'str' object has no attribute '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)

然后,我有一个 Customer 模型和关联的 Customer Billing Information modelform,其中包含一个指向上述查找表的外键字段:

# 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 行引发的。

有人看到我在这里做错了吗?非常感谢您的帮助。

4

1 回答 1

3

改变:

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

至:

country = forms.ModelChoiceField(queryset=Country.objects.all(),
    empty_label=None)
于 2013-02-15T18:50:51.100 回答