在django中使用MultipleChoiceField

时间:2012-02-03 22:59:14

标签: django django-models

我一遍又一遍地阅读文档。它说,我必须导入django.forms以使用多选小部件。我很困惑,如果我将联盟定义为模型,并想选择DAY_CHOICES作为multiplechoicefield,我将如何去做。我可以在Model类中定义调用表单吗?

为了更好地理解我的查询,这是我的models.py

class League(models.Model):
    DAY_CHOICES = (
        ('MO', 'Monday'),
        ('TU', 'Tueday'),
        ('WE', 'Wednesday'),
        ('TH', 'Thursday'),
        ('FR', 'Friday'),
        ('SA', 'Saturday'),
        ('SU', 'Sunday'),
    )

    SEASON_STATUS = (
        ('In Progress', 'In Progress'),
        ('Concluded', 'Concluded')
    )

    LEAGUE_TYPE = (
        ('Home', 'Home League'),
        ('Away', 'Home and Away League'),
        ('Cup', 'Cup'),
        ('CupAway', 'Cup, Home and Away'),
    )

    name = models.CharField(max_length=30)
    league_type = models.CharField(max_length=30, choices=LEAGUE_TYPE, default='Away')
    play_days = models.CharField(max_length=28, choices=DAY_CHOICES, default='SU')
    #defining rules for winning and loosing
    win = models.IntegerField(max_length=2)
    loss = models.IntegerField(max_length=2)
    draw = models.IntegerField(max_length=2)
    status = models.CharField(max_length=15, choices=SEASON_STATUS, default='In Progress')

//小鼠

3 个答案:

答案 0 :(得分:1)

你真的不想在Django中混淆三种不同的东西:

  • 模型字段
  • 表单字段
  • 表单小部件

模型字段控制进入数据库的内容,当使用自动表单创建功能时,模型字段类型将为您提供包含特定表单字段的表单。

表单小部件控制用户在表单中与之交互的HTML。对于某些表单字段类型,可能有多个小部件可以工作(即管理员使用的时间和日期小部件与通常在用户创建的表单中使用的小部件)。

一旦你明白了这个区别,那么大部分文档应该更有意义。

答案 1 :(得分:0)

您不在models.py文件中配置表单。你的models.py文件看起来很好。表单和用于表示这些表单中的各个字段的小部件通常在forms.py文件中定义。查看creating forms from models上的文档以及customizing the display of models within the Admin接口上的文档(假设您通过该接口提供此表单)。

答案 2 :(得分:0)

通常charField choices用于存储选项。

假设您选择星期日和星期一。您想在play_days中存储什么内容?某种序列化,例如" SU,MO"?然后你需要告诉django如何序列化数据。此外,这可能是一个坏主意,因为它很难查询数据。

相反,请考虑创建一个新课程以保留日期,并将play_days更改为many to many field。作为奖励,m2m字段默认具有多选小部件