使用ModelChoiceField实例化模型

时间:2016-05-29 15:47:45

标签: django django-models django-forms

我的应用中有一个模型只包含一个字段 - 一个ModelChoiceField - 我希望与用户配置文件相关联(用户可以有多个与之关联的选项)。这些选择在运行时不会发生变化,我最终会根据自己的选择使用它们来过滤用户。这是两个模型的样子。

...
class Choice(models.Model):
    Choice1 = 0
    Choice2 = 1
    Choice3 = 2
    Choices_Available = (
            (Choice1, 'Choice1'),
            (Choice2, 'Choice2'),
            (Choice3, 'Choice3'),
    )
    choice = models.IntegerField(choices=Choices_Available, null=True)

    def __iter__(self):
        return iter(self.Choices_Available)

    def __str__(self):
        return self.Choices_Available[self.choice]

class Profile(models.Model):
    choice = models.ManyToManyField(Choice)

我遇到的问题是尝试实际选择一个选项并将该选择与用户相关联。在实际进行选择的用户表单中,在我看到的大多数示例中,过滤了可用选项对象的MultipleChoiceField:

...
class EditProfile(forms.ModelForm):
    choice = forms.MultipleChoiceField(choices=Choice.objects.all(), widget=CheckboxSelectMultiple)
    class Meta:
        model = Profile
        fields = ['choice']

这个特定的设置目前没有任何显示,因为没有Choice对象。

我想我会通过为每个可用选项创建一个选择对象来解决这个问题。然后,当用户请求带有表单的页面时,他们会看到可用的选项。最后,所有用户都可以与许多选择对象相关联(在此示例中为3),并且数据库中只存储了许多对象,从而最大限度地减少了使用的空间。

要做到这一点,我需要能够创建Choice对象。我的问题归结为:如何创建选择了选项的Choice对象(目前只有默认的 init 方法)。此外,这是一个合理的方式来实现这个功能吗? 感谢

1 个答案:

答案 0 :(得分:0)

对于想知道同样事情的人,我会告诉你我发现了什么。 要实例化指定选项的对象:

Choice.objects.create(choice=0)

当然要更改与选项对应的数字,这可以通过编程方式完成。

另外,我在表格中有错误。 MultipleChoiceField用于从一组选项中进行选择。 ModelChoiceField非常相似,但它接受对象的查询集,并允许您从这些对象中进行选择。这是您可能想要的功能,例如我的示例中的多对多字段。