我正在尝试使用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行引发的。
有谁看到我在这里做错了什么?非常感谢你的帮助。
答案 0 :(得分:3)
变化:
country = forms.ModelChoiceField(queryset='Country.objects.all()',
empty_label=None)
为:
country = forms.ModelChoiceField(queryset=Country.objects.all(),
empty_label=None)