Django模型MultipleChoice

Alv*_*oAV 50 python django django-models

我知道有没有MultipleChoiceField一个模式,你只能用它的形式.

今天,在分析与多项选择相关的新项目时,我遇到了一个问题.

我想有一个像场CharFieldchoices多样选择的选项.

我通过CharField在表单中创建并管理多个选项forms.MultipleChoiceField并使用逗号分隔选项来解决此问题.

在这个项目中,由于配置,我不能这样做,因为我上面提到的,我需要做的是在型号,我宁愿不要编辑Django管理形式 既不使用形式.我需要一个具有多个选项的模型字段选项

  • 有人通过模特解决了这样的事吗?

也许覆盖一些模型功能或使用自定义小部件......我不知道,我有点迷失在这里.


编辑

我知道简单的选择,我希望有类似的东西:

class MODEL(models.Model):
    MY_CHOICES = (
        ('a', 'Hola'),
        ('b', 'Hello'),
        ('c', 'Bonjour'),
        ('d', 'Boas'),
    )
    ...
    ...
    my_field = models.CharField(max_length=1, choices=MY_CHOICES)
    ...
Run Code Online (Sandbox Code Playgroud)

但具有保存多个选择的能力不仅仅是一个选择.

spo*_*key 57

您需要考虑如何在数据库级别存储数据.这将决定您的解决方案.

据推测,您希望表中存储多个值的单个列.这也会强迫您考虑如何序列化 - 例如,如果您需要存储可能包含逗号的字符串,则不能简单地用逗号分隔.

但是,您最好使用类似下列之一的解决方案:

  • 我来自未来,谢谢你的回答!多选字段就像魅力一样! (4认同)
  • django-multiselectfield正是我想要的。我没有看到另一个人的问题!非常感谢您提供此信息! (2认同)

lec*_*hup 49

如果您正在使用Postgres,请考虑使用ArrayField.

from django.db import models
from django.contrib.postgres.fields import ArrayField

class WhateverModel(models.Model):
    WHATEVER_CHOICE = u'1'
    SAMPLE_CHOICES = (
        (WHATEVER_CHOICE, u'one'),
    )
    choices = ArrayField(
        models.CharField(choices=SAMPLE_CHOICES, max_length=2, blank=True, default=WHATEVER_CHOICE),
    )
Run Code Online (Sandbox Code Playgroud)

  • @DeanKayton您需要一个管理员自定义表单,将 TypedMultipleChoiceField 分配给字段 `class UserForm(forms.ModelForm): Roles = TypedMultipleChoiceField(choices=User.ROLES)`,然后在您的管理员上设置 `form=UserForm` (3认同)

Mat*_*anz 11

从这两者来看,https://pypi.python.org/pypi/django-select-multiple-field/看起来更圆润,更完整.它甚至有一套很好的单元测试.

我发现的问题是它在实现模型字段的类中抛出了Django 1.10弃用警告.

我修好了这个并发了PR.最新的代码,直到他们合并我的PR(如果他们决定嘿嘿)在我的回购分支中,在这里:https://github.com/matiasherranz/django-select-multiple-field

干杯!

M.-

  • 也许是真的,它无论如何都有助于桌面上的主题.鉴于我的声誉不超过50分,我无法回复spookylukey的评论,这是我的初衷.如果你认为贡献开源并在这里分享它是不值得的,那么请继续禁止我的评论.祝你今天愉快! (24认同)