Django:“模块”对象没有属性“ChoiceField”、“MultipleChoiceField”

Man*_*edi 2 python django python-2.7

我正在尝试在表单中创建单选按钮和复选框,并尝试分别使用模型字段ChoiceFieldMultipleChoiceField来实现相同的功能。

表格.py

from django import forms
from rango.models import Evangelized

class EvangelizedForm(forms.ModelForm):
    gender = forms.ChoiceField(widget=forms.RadioSelect(
                 choices=Evangelized.GENDER_CHOICES), help_text="Gender")
    area_of_interest = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(
                                                    choices=Evangelized.AREA_CHOICES), help_text="Areas of interest(Upto 3)")
Run Code Online (Sandbox Code Playgroud)

模型.py

from django.db import models

class Evangelized(models.Model):
    GENDER_CHOICES = (('M', 'Male'), ('F', 'Female'), ('U', 'Unisex/Parody'))
    gender = models.ChoiceField(choices=GENDER_CHOICES)
    AREA_CHOICES = (('Govt', 'Govt'), ('Entertainment', 'Entertainment'), ('Automobile', 'Automobile'),
                        ('Careers', 'Careers'), ('Books', 'Books'), ('Family', 'Family'), ('Food', 'Food'),
                            ('Gaming', 'Gaming'), ('Beauty', 'Beauty'), ('Sports', 'Sports'), ('Events', 'Events'),
                                ('Business', 'Business'), ('Travel', 'Travel'), ('Health', 'Health'), ('Technology','Technology'))
    area_of_interest = models.MultipleChoiceField(choices=AREA_CHOICES)
Run Code Online (Sandbox Code Playgroud)

但是,我在分别处理每种类型的模型字段时遇到以下错误:

 'module' object has no attribute 'ChoiceField'



'module' object has no attribute 'MultipleChoiceField'
Run Code Online (Sandbox Code Playgroud)

我的代码似乎有什么问题?

Alv*_*aro 5

这些模型定义数据库级别类型。

您必须指定模型的数据类型,并且可以使用“choices”kwarg 指定选项。

所以,你的模型应该是这样的:

from django.db import models

class Evangelized(models.Model):
    GENDER_CHOICES = (('M', 'Male'), ('F', 'Female'), ('U', 'Unisex/Parody'))
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Run Code Online (Sandbox Code Playgroud)

对于多项选择字段的情况,您可以使用CommaSeparatedIntegerField

我建议您查看具有选择的模型的文档

  • @ManasChaturvedi 但它们适用于您的形式。不在你的模型中。表单字段代表数据如何呈现给用户的视觉(好吧,html)表示。模型字段表示数据如何保存在数据库中。“ChoiceField”在模型中没有任何意义,因为“Choice”不是数据库可以保存的内容。 (3认同)