2012-02-03 66 views
0

我一直在翻阅文档。它说,我必须导入django.forms以使用多选小部件。我很困惑,如果我将联赛定义为模型,并且想选择DAY_CHOICES作为多个选项字段,那么我将如何去做。我可以在Model类中定义调用表单吗?在django中使用MultipleChoiceField

为了更好地理解我的查询,这里是我的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') 

//鼠标

回答

1

有三种不同的东西,你真的不想在Django感到困惑:

  • 示范田
  • 表单域
  • 表单控件

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

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

一旦你清楚地认识到这种区别,那么大部分文档应该更有意义。

+0

_模型字段控制进入数据库的内容,并且在使用自动表单创建功能时,模型字段类型将为您提供一个包含特定表单field_ <的表单,这使我感到困惑@KayESS。据此,首先我需要创建一个包含选项的独立模型。创建一个表单来调用这个选项。然后我可以在我的主模型中调用这个表单。对? – debuggerpk 2012-02-04 10:55:32

+0

当你从模型中向Django请求表单时,它会根据模型字段选择要使用的表单字段。这也是管理员工作的方式。所以你放入模型的选择是唯一可以进入数据库的选择。Django将为您创建一个具有相同选择的表单,但这次是在表单字段而不是模型字段中。 – KayEss 2012-02-04 15:45:38

0

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

+0

确切地说,我希望管理员能够选择多个playday选项。 – debuggerpk 2012-02-04 07:50:25

0

通常一个charFieldchoices是用来存储一个的选择。

假设你选择星期日和星期一。您想要在play_days中存储什么?某种序列化,例如“苏,莫”?然后你需要告诉Django如何序列化数据。另外,这可能是坏主意,因为它使查询数据变得困难。

相反,考虑制定新的类来保存天,改变play_daysmany to many field。作为奖励,m2m字段默认具有多选小部件

+0

我使用[dateutil]中的rrule(http://labix.org/python-dateutil)来计算灯具,使用我之前编写的自定义函数。所以我想要SU,MO在django db中作为逗号分隔值。这将使我的生活从长远来看变得更容易:) – debuggerpk 2012-02-04 10:54:01

相关问题