【问题标题】:django multiple choice model problemsdjango 多项选择模型问题
【发布时间】:2011-07-08 10:42:24
【问题描述】:

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

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

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: 'type' 具有 m2m 关系 具有模型类别,它具有 没有安装或者是抽象的。

【问题讨论】:

    标签: django django-models multiple-choice


    【解决方案1】:

    你可以使用:

    day = forms.ModelMultipleChoiceField(queryset=Day.objects.all())
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        对于您的问题的第一部分。你应该使用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,但由于它在另一个应用程序中,您需要指定应用程序名称。

        【讨论】:

        • 对于第二个问题,我改了:"type = models.ManyToManyField('Category', null=True, blank=True)" FOR "type = models.ManyToManyField(Category, null=True, blank=True)" 并且工作正常。对于第一个问题制作一个新模型,我会在几个小时内尝试您所说的,谢谢!!!
        • 很高兴为您工作。如果您需要我说明如何使用MultipleChoiceField,请告诉我。
        猜你喜欢
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        • 2016-06-07
        • 1970-01-01
        相关资源
        最近更新 更多