在表单中,如何使用外键显示来自其他模型的字段,特别是带有选项的字段?

esc*_*pee 3 python django foreign-keys modelform models

我正在制作一个测试表格,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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*kov 5

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

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

    class Meta:
        model = YourModel
        exclude = ('country',)
Run Code Online (Sandbox Code Playgroud)

然后,在您的视图中,您应该手动创建(或获取如果存在)您的公司并保存表单:

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()
Run Code Online (Sandbox Code Playgroud)