gpt4 book ai didi

模型和表单中的Django多选和多选字段

转载 作者:行者123 更新时间:2023-12-04 11:49:06 25 4
gpt4 key购买 nike

我正在学习 Django 并且遇到了一个问题,我不知道谷歌是为了什么。我有标准User模型和 Profile指向 User 的模型模型通过 OneToOne field 。这部分加上个人资料的表格和 CBV 都可以工作。

个人资料持有者可以拥有一个或多个专业从属关系。这不是针对工会的,但我的父亲,例如,作为焊工,隶属于:“钢铁 worker ”、“ Steam 装配工”、“锅炉制造商”、“管道装配工”以及其他几个使用焊工的特定工会.因此,如果我希望配置文件和表单允许多个选择和多个选择的附属结果,那么我看到您可能会使用

class Profile(models.Model):
GROUPS = (
('IW', 'Iron Workers'),
('PF', 'Pipe Fitters'),
...
)
affiliation = models.CharField(
max_length=3,
choices=RANK,
default='U',
blank=True,
null=True,
)
...

在关联的表单中,您似乎使用了
    GROUPS = (
('IW', 'Iron Workers'),
('PF', 'Pipe Fitters'),
...
)
affiliation = forms.MultipleChoiceField(
choices=GROUPS
)

如果我想要这些选项的数据库表而不是元组怎么办?如果我必须添加到选择列表中,那么编辑代码可能不是最方便的响应。也许组列表应该在 Django 管理区域中。

我如何告诉模型和表单在单独的数据库表中查找可能的值,然后如何修改模型和表单以允许零个或多个组从属关系?

最佳答案

您需要创建一个 many-to-many relationship到一个新模型,我们称之为 Skill ,表示可以动态创建的可用技能。

class Profile(models.Model):
# ...

skills = models.ManyToManyField(
to='myapp.Skill', # use a string in the format `app_name.model_name` to reference models to avoid issues using the model before it was defined
related_name='user_profiles', # the name for that relation from the point of view of a skill
)

class Skill(models.Model):
name = models.CharField(max_length=255)
abbreviation = models.CharField(max_length=3)

然后在您的表单中,您可以添加多对多字段 skills .默认情况下,它将是 django 管理中的多选字段。

关系可以为零到 n每对 profile 的条目和 skill .换句话说,每个用户都可以有零到 n技能,反之亦然。

要允许默认值,您必须编写一个自定义迁移来创建 Skill 的默认实体。以确保它在运行时在数据库中。

关于模型和表单中的Django多选和多选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52022714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com