如何从两个模型填充ModelChoiceField

时间:2014-09-16 08:02:25

标签: django python-3.x forms model

在我的表单中,我想用两个模型中的数据填充ModelChoiceField。

如何更改包含两个不同模型的对象的查询集?

我的方法是将查询集打包到列表中。但是,这似乎不是数据的正确容器。

1 个答案:

答案 0 :(得分:2)

我不认为您可以将ModelChoiceField与两个不同的模型一起使用,因为您不能拥有由两个不同模型组成的查询集。

您最好尝试使用ChoiceField,它接受​​带有元组列表的选项参数。

假设你在models.py中有两个模型:

from django.db import models

class Model1(models.Model):
    name = models.CharField(max_length=20, primary_key=True)
    description = models.CharField(max_length=200)

class Model2(models.Model):
    name = models.CharField(max_length=20, primary_key=True)
    description = models.CharField(max_length=200)

您可以在forms.py中创建一个这样的Form:

from django import forms

from .models import Model1, Model2

class MultipleModelChoiceForm(forms.Form):
    select = forms.ChoiceField(choices=[])

    def __init__(self, *args, **kwargs):
        super(MultipleModelChoiceForm, self).__init__(*args, **kwargs)
        choices = []
        for obj1 in Model1.objects.all():
            choices.append((obj1.name, obj1.description))
        for obj2 in Model2.objects.all():
            choices.append((obj2.name, obj2.description))
        self.fields['select'].choices = choices

请注意,选择是在表单的 __ init __ 中定义的,以便使用 Model1 Model2 中的所有记录更新选择字段您创建表单的实例。