数据库中选项的Django multipleechice字段

2024-06-10 15:40:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的新闻聚合应用程序设计一个模型、视图和模板。我希望模板为用户提供一个带有数据库选项的多选字段表单。如何在我的模型中设计这个?在

我正在阅读关于ManyToManyField的Django文档(有记者和文章的那个),但我不认为这是一个非常正确的关系,因为在我的例子中,“文章”可以没有记者而记者没有文章。在

我有用户。我有小溪。Streams是一个用户可以注册来跟踪和查看聚合的标题片段的新闻站点的集合,例如来自CNN、Twitter、Google news等。流可以没有用户存在。一个流可以有许多用户。一个用户可以没有流,事实上所有的用户帐户在我的应用程序中都没有流,直到他们选择了一个。一个用户可以有许多流。在

在模板中,我想创建一个包含数据库中所有流选项列表的表单(这可能会随着我以后添加更多选项而改变)。当用户选择一个流时,它将被添加到他们的仪表板视图中。它们可以添加和删除流。然而,只有1个Twitter,1个谷歌新闻等来源。我不能在用户模型中使用typical choices选项,我希望它是“动态的”,直接从Streams数据库中提取。在

这就是我现在所拥有的,但我知道这是不对的:

溪流/模型.py

from django.db import models
from django.contrib.auth.models import User


class Stream(models.Model):
    user = models.ManyToManyField(User, blank=True, null=True)
    name = models.CharField(max_length=30)

用户/模型.py

^{pr2}$

Tags: 用户py模型视图模板数据库表单models
2条回答

ManyToManyField已经隐式地创建了在接受的答案中描述的“中介表”。根据文件:

Behind the scenes, Django creates an intermediary join table to represent the many-to-many relationship.

您可以将一个callable传递给用户,ChoicesFieldchoices字段,允许在生成表单时动态确定可用选项的列表。在

用户流关系中的有效选项列表已受关系约束,因此在模型字段中指定可用选项没有任何好处。在

只需为流列表添加一个模型,为用户选择的流添加另一个模型

class Stream(models.Model):
    name = models.CharField(max_length=50)

class UserStream(models.Model):
    user = models.ForeignKey(User)
    name = models.ForeignKey(Stream)

就这样。将可能的流插入Stream模型,并将用户选择的流插入UserStream模型。在

相关问题 更多 >