django - 我如何创建一个与数据库绑定的下拉字段?

时间:2012-07-11 03:57:37

标签: django

我只想要一个下拉字段 - 如下所示:

Sex: | Male   |v|
     | Female |

你知道,这是一个非常标准的下拉。

我为此创造了这个:

class Relationship(models.Model):

    SEX = [
        ("M","Male"),
        ("F","Female")
    ]

    title =  models.CharField(max_length=100)

    sex = models.ChoiceField(label='', choices=SEX)

我将自己处理模板中的标签,因此label=""

问题是这样的:当我运行syncdb时,django吓坏了,因为首先是:

class RelationshipForm(forms.ModelForm):
    class Meta:
        model = Relationship
        ordering = ['create_date']
        fields = ('title','sex')

可悲的是,这导致我得到这个例外:

  

django.core.exceptions.FieldError:为关系指定的未知字段(性别)

我该怎么办?要明确:

  1. 我希望创建的关系数据库表具有“性别”字段,该字段包含男性或女性

  2. 我想在你建立新关系时出现wee下拉列表。

  3. 我确定这很简单,有什么想法吗?

3 个答案:

答案 0 :(得分:3)

模型中没有ChoiceField。您希望CharField选择如下。

sex = models.CharField(max_length=1, label='', choices=SEX)

答案 1 :(得分:0)

可替换地:

class Profile(models.Modell):
    """
    User profile model
    """
    PROF = 1
    DR = 2
    MR = 3
    MRS = 4
    MS = 5
    PROFESSION_TITLE = ((PROF, 'Prof.'),
                        (DR, 'Dr.'),
                        (MR, 'Mr'),
                        (MRS, 'Mrs'),
                        (MS, 'Ms'),)
    # personal details
    user = models.ForeignKey(User, unique=True)
    title = models.IntegerField('Title', choices=PROFESSION_TITLE,
            max_length=25, blank=True, null=True)

请参阅此链接:http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/

答案 2 :(得分:0)

哎呀。我看到我做错了什么 - 基本错误。我现在暂时把它放在这里,除非这里的每个人都认为这是不必要的基本事情@ SO

在模型中:

class Relationship(models.Model):

    title =  models.CharField(max_length=100)

    sex = models.CharFieldField(max_length=100)
表格中的

class RelationshipForm(forms.ModelForm):
    class Meta:
        model = Relationship
        ordering = ['create_date']
        fields = ('title','sexField')

    SEX = [
        ("M","guy"),
        ("F","girl")
    ]

    sexField = ChoiceField(label='', choices=SEX)

    def clean(self):
        cleaned_data = super(RelationshipForm, self).clean()
        self.instance.sex = (self.cleaned_data.get('sexField',None) )