3

我正在制作一个ModelForm有两个模型的测试表格。

  1. Country
  2. Email

我正在创建一个基于Email模型的表单。该Country模型具有名称字段,其值由COUNTRIES列表给出。我想在EmailForm所有COUNTRIES值中显示名称字段。我必须使用外键吗?请指导。

我的模型如下所示:

COUNTRIES = (('IND', 'India'), ('PAK', 'Pakistan'), ('AMR', 'America'))

class Country(models.Model):
    name = models.CharField(max_length=3, choices=COUNTRIES)

class Email(models.Model):
    title = models.CharField(max_length=50)
    country = models.ForeignKey('Country')
    sender = models.EmailField(max_length=20)
    date = models.DateTimeField()
    text = models.CharField(max_length=20)

class EmailForm(ModelForm):
    class Meta:
        model = Email

如果我从中生成一个表格。它显示一个空白的下拉菜单。如何从列表中获取值?

4

2 回答 2

5

您可能希望将自定义字段添加到您的 ModelForm 并排除原始外键:

class EmailForm(forms.ModelForm):
    country_name = forms.CharField()

    class Meta:
        model = YourModel
        exclude = ('country',)

然后,在您看来,您应该手动创建(或获取是否存在)您的公司并保存表单:

def foo(request):
    if request.method == 'POST':
        form = EmailForm(request.POST)
        if form.is_valid():
            form.instance.country = Country.objects.get_or_create(cname=form.cleaned_data['country_name'])
            form.save()
于 2012-08-13T11:53:30.613 回答
0

我认为答案可能在这篇文章Django - Display a ModelForm foreign key field

但是,我还没有成功地使它工作。

于 2015-03-17T08:44:33.510 回答