我一直在搜索和查找文档,但我想问一下并确认这里的最佳解决方案。
尝试定义模型选择。
1.“是、否和不确定”选项,从无线电选择
1.如何定义多项选择
简单示例:在我的网站上models.py,我有
class Property(models.Model):
name = models.CharField()
class Feature(models.Model):
YES_CHOICES = ( # example of 1, there can be only one selection
('YES', 'Yes'),
('NO', 'No'),
('NOT_SURE', 'Not Sure')
)
PARKING_CHOICES = ( # example of 2, there can be multiple selections
('GARAGE', 'Garage'),
('STREET', 'Street'),
('PRIVATE_LOT', 'Private Lot'),
('VALET', 'Valet'),
)
nearby_school = models.CharField(max_length=8, choices=YES_CHOICES)
parking_options = models. MultipleChoiceField(choices=PARKING_CHOICES)
class PropertyFeature(models.Model)
property = models.ForeignKey(Property)
feature = models.ForeignKey(Feature)
...
这些是最好的方法吗?
1.我是否应该使用NullBooleanField来代替“是、否、不确定”问题?
1.这是定义和存储多项选择题答案的正确方法吗?有时,我看到人们使用manytomany对象。
只是想使用Django提供的最有效和最简单的方法。
2条答案
按热度按时间y4ekin9u1#
大约18个月后,Django现在有了更好的处理
choices
的方法; Łukasz Langa'sdj.choices
。其使用示例来自blog post introducing the project:但是,这仍然不适用于多重选择。
w8biq8rn2#
是的,
NullBoolean
是合适的,但是如果有更多的选项不适合NullBoolean
的配置文件,我赞成IntegerField
,因为它具有可读性和跨选项的一致性。Null
可能直观地表示n/a
,但是随着您添加更多的单选题,我认为使用Map到静态变量的IntegerField
会更加直观。同样,对于用户可能会基于这些特性筛选属性的这种情况,不必在动态查询中使用特殊情况的Null也很有用。
示例:
这篇古帖至今仍有很大的参考价值:http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/
至于多项选择字段,我确实认为使用M2M字段是最简单/最好的方法。
您可以设置您的
forms.MultipleChoiceField
将数据存储为逗号分隔的字段并适当地显示,但事实上,您可以轻松地查询m2m字段是一个巨大的好处+它与ModelMultipleChoiceField
一起开箱即用。