这可能是不可能的,但我想知道是否有办法将模型列表保存为另一个模型的一部分。例如,假设我有一个名为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
中添加一个字段/列,该字段/列将指向多个组实体。有没有办法做到这一点?必须在Group
和Message
之间建立什么样的数据库关系才能完成?谢谢。
答案 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 many
和Message
之间存在Group
关系。你可以在many to many
和Message
之间建立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)
现在你有更多选择;)。