如何将数据库模型/实体列表保存为模型中的字段(Django)?

时间:2015-07-26 04:30:03

标签: django django-models

这可能是不可能的,但我想知道是否有办法将模型列表保存为另一个模型的一部分。例如,假设我有一个名为Group的模型,定义如下:

class Group(models.Model):
    name = models.CharField("Group Name", max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)

然后我有另一个名为Message的模型,定义如下:

class Message(models.Model):
    content = models.CharField(db_index=True, max_length=160)
    composer = models.ForeignKey(User, related_name='composed_message')
    created_at = models.DateTimeField(auto_now_add=True)
    # groups = a_list_of_group # How do I accomplish this? 

我想在名为Message的模型groups中添加一个字段/列,该字段/列将指向多个组实体。有没有办法做到这一点?必须在GroupMessage之间建立什么样的数据库关系才能完成?谢谢。

3 个答案:

答案 0 :(得分:1)

您需要从Group到Message的ForeignKey

class Group(models.Model):
    name = models.CharField("Group Name", max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)
    message = models.Foreignkey(Groups, null=True, related_name="groups")

您可以按如下方式从消息实例访问这些组:

message.groups.all()

请注意,这意味着一个组只有一个Message,而一个Message可以包含任意数量的组。这是你想要的吗?

答案 1 :(得分:1)

您可以使用ManyToManyField

ManyToManyField模型中的Message表示Message可以在多个Groups中发布,Group可以有多个Message class Message(models.Model): content = models.CharField(db_index=True, max_length=160) composer = models.ForeignKey(User, related_name='composed_message') created_at = models.DateTimeField(auto_now_add=True) groups = models.ManyToManyField(Group) # add a 'ManyToManyField' for storing multiple groups 对象。

Message

此处,模型Group对象现在指向多个message_obj实体。

要获取特定邮件对象message_obj.groups.all() # lists all the groups for a particular message 的所有组,您可以使用以下内容:

message_object

要将群组保存到group_obj,您可以执行以下操作:

我们首先创建一个组对象.add()(比方说)。然后保存它我们可以使用message_object.groups.add(group_obj) # attach the group object to a message

{{1}}

答案 2 :(得分:1)

@Mark Galloway给了你一个很好的答案,但正如他正确评论的那样,one to manyMessage之间存在Group关系。你可以在many to manyMessage之间建立Group关系,然后就可以使用它:

class Message(models.Model):
    content = models.CharField(db_index=True, max_length=160)
    composer = models.ForeignKey(User, related_name='composed_message')
    created_at = models.DateTimeField(auto_now_add=True)
    groups = models.ManyToManyField(Group)

现在你有更多选择;)。