我在模型中有多种选择存在两个不同的问题。
首先,我正在尝试进行多项选择,以便用户可以选择一周中的一天或多天:
DAYS_CHOICES = (
(1, _('Monday')),
...
(7, _('Sunday')),
)
...
day = models.ManyToManyField('day', choices=DAYS_CHOICES)
第二个问题:
我想在其他模型中使用模型定义创建ManyToMany关系: 首先(导入模型):
from events.models import Category
第二个(与模型相关的字段):
type = models.ManyToManyField('Category', null=True, blank=True)
我在syncdb上收到此错误:
错误:一个或多个模型没有 验证:situ.situ:'day'有一个m2m 与模型日的关系,具有 要么没有安装,要么是 抽象。
situ.situ:'type'有m2m关系 与模型类别,其中任何一个 没有安装或是抽象的。
答案 0 :(得分:5)
你可以使用:
day = forms.ModelMultipleChoiceField(queryset=Day.objects.all())
答案 1 :(得分:4)
不幸的是,ManyToMany关系仅适用于与其他模型的关系,而不适用于选择集中的值。 Django没有提供内置的多选模型字段类型。但是,我在过去使用多个选择字段时使用了此代码段:http://www.djangosnippets.org/snippets/1200/
这会将多个选定的选项编码为存储在CharField中的逗号分隔列表,除非您需要对选择进行某种连接或某些操作,否则该选项很有效。如果您需要这样做,则必须定义一个可以使用ManyToManyField的新Day模型。
第二个问题,我相信,只是第一个问题的结果 - 如果你澄清了这个问题,你就没问题了。
答案 2 :(得分:2)
问题的第一部分。您应该使用MultipleChoiceField
DAYS_CHOICES = (
(1, _('Monday')),
...
(7, _('Sunday')),
)
...
days = forms.MultipleChoiceField(choices=DAYS_CHOICES)
http://docs.djangoproject.com/en/dev/ref/forms/fields/#multiplechoicefield
这将产生一个Unicode对象列表。
对于第二个问题,您需要在m2m字段的模型的抽象声明中包含应用程序名称,或者不要抽象地声明它。
type = models.ManyToManyField(Category, null=True, blank=True)
或
type = models.ManyToManyField('events.Category', null=True, blank=True)
如果稍后在models.py中的同一个应用中定义了Category
模型,则可以将其保留为Category
,但由于它位于另一个应用中,因此您需要指定应用名称。