【问题标题】:Get List of objects in django form以 django 形式获取对象列表
【发布时间】:2014-01-18 01:50:12
【问题描述】:

我正在尝试使用 Django 创建联系人管理器。我用以下代码创建了一个表单:

class ContactForm(forms.ModelForm):
    first_name = forms.CharField(max_length=20, help_text="First name")
    last_name = forms.CharField(max_length=20, help_text="Last name")
    email = forms.CharField(max_length=100, required=False, help_text="Email")
    phone = forms.CharField(max_length=15, required=False, help_text="Phone")
    company = forms.ChoiceField(widget=forms.Select, choices=Company.objects.all(), required=False, help_text="Company")

    class Meta:
        model = Contact
        fields = ('first_name', 'last_name', 'email', 'phone', 'company')

我在公司领域遇到问题。我不知道如何将所有公司的列表传递给表单,以便它可以在 html 中显示为选择标记。我相信我必须将它转换为字典,这样“选择”参数才会起作用,但我不知道该怎么做。

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    使用ModelChoiceField

    company = forms.ModelChoiceField(queryset=Company.objects.all(), required=False, help_text="Company")
    

    【讨论】:

    • 这也有效,但 LuRsT 提供的解决方案为您提供了使用 PK 的选项,因此如果我将其用作编辑表单,表单将选择实例的值,这就是我真的很想要。我相信我应该问得更好。还是谢谢!
    • 实际上,在 LuRsT 提供的答案出现一些问题后,我再次尝试了这个,效果很好!
    【解决方案2】:

    您需要将元组或 2 元组列表传递给 choices kwarg。

    https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ChoiceField.choices

    试试这个:

    company = forms.ChoiceField(widget=forms.Select, choices=Company.objects.all().values_list(pk, name), required=False, help_text="Company")
    

    https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list

    【讨论】:

    • @angardi 不客气,您能否将我的答案标记为解决方案以便问题结束?谢谢
    • 我对该代码有一些问题,起初它似乎可以工作,因为它给了我列表并从下拉列表中选择了正确的选项,但是当我尝试保存表单时收到一条错误消息,提示我选择的公司不存在。 Omid Raha 的回答不会发生这种情况。
    • 啊,当然,我忽略了您使用的是 ModelForm,这就是为什么 Omid 的答案有效而不是我的原因,因为 Form 除了模型而不是 pk。
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2017-12-17
    • 2018-12-01
    • 2011-02-01
    相关资源
    最近更新 更多