4

我在模型中有多个选择有两个不同的问题。

首先,我正在尝试进行多项选择,以便用户可以选择一周中的一个或多个天:

DAYS_CHOICES = (
    (1, _('Monday')),
    ...
    (7, _('Sunday')),
)
...
day = models.ManyToManyField('day', choices=DAYS_CHOICES)

第二个问题:

我想与在其他模型中定义的模型建立多对多关系:首先(导入模型):

from events.models import Category

二(与模型相关的字段):

type = models.ManyToManyField('Category', null=True, blank=True)

我在syncdb上收到此错误:

错误:一个或多个模型未验证:situ.situ:'day' 与模型天有 m2m 关系,它要么未安装,要么是抽象的。
situ.situ:“类型”与模型类别具有 m2m 关系,该模型类别要么尚未安装,要么是抽象的。

4

3 回答 3

5

你可以使用:

day = forms.ModelMultipleChoiceField(queryset=Day.objects.all())
于 2011-04-13T06:23:26.520 回答
4

不幸的是,ManyToMany 关系仅适用于与其他模型的关系,而不适用于选择集中的值。Django 不提供内置的多选模型字段类型。但是,我过去在使用多项选择字段时使用过这个片段:http: //www.djangosnippets.org/snippets/1200/

这会将多个选择的选项编码为一个逗号分隔的列表,存储在 CharField 中,效果很好,除非您需要对选择进行某种连接或其他操作。如果您需要这样做,您将必须定义一个新的 Day 模型,您可以在该模型上使用 ManyToManyField。

我相信第二个问题只是第一个问题的结果——如果你解决了这个问题,你会没事的。

于 2011-03-03T23:19:04.147 回答
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)

如果Category模型稍后在 models.py 中的同一应用程序中定义,您可以保留它,Category但由于它在另一个应用程序中,您需要指定应用程序名称。

于 2011-03-04T04:39:08.290 回答