gpt4 book ai didi

python - Django 中 ForeignKeys、ManyToMany 和 GenericForeignKeys 的最佳实践

转载 作者:行者123 更新时间:2023-11-28 18:51:50 27 4
gpt4 key购买 nike

我正尝试在 Django 中制作一堵墙,我已经做出了一个重要的设计决定。

我有以下类(class):

墙报,用户资料,团体,事件

问题是我有用户配置文件、事件和组,它们都有可以张贴到的墙。因此,我无法与发布到正在发布到的模型的用户建立外键关系,因为可以发布多个模型(除非我使用通用键,但我觉得所有墙贴都必须有一些外壳就像一个墙对象)。

然后我想到了一个中间类型的对象,比如墙,墙柱将外键指向,然后用户组和事件将外键指向墙。这对我来说似乎也很低效,因为墙没有任何东西可存储,而更像是一个围栏对象。

在 Django 中使用 ForeignKeys 和 ManyToManyFields 以及 GenericForeignKeys 的最佳实践是什么?至于你如何判断关系应该走向何方?

感谢所有的输入。

最佳答案

class WallPost(models.Model):
text = models.TextField()

class UserProfile(models.Model):
name = models.CharField(max_length=128)
wall_posts = models.ManyToManyField(WallPost, through='UserWall')

class UserWall(models.Model):
profile = models.ForeignKey(UserProfile)
post = models.ForeignKey(WallPost)

#same for groups
class Group(models.Model):
name = models.CharField(max_length=128)
wall_posts = models.ManyToManyField(WallPost, through='GroupWall')

class GroupWall(models.Model):
group = models.ForeignKey(Group)
post = models.ForeignKey(WallPost)

UserWall.objects.filter(profile_id=profile.id).select_related('post')
GroupWall.objects.filter(group_id=group.id).select_related('post')

#or
group = Group.objects.get(id=1).select_related('wall_posts')
posts = group.wall_posts.all()

class Wall(models.Model):
TYPE = (
(0, 'User'),
(1, 'Group'),
(2, 'Event'),
)

source = IntegerField() #id of user/group/event
source_type = SmallIntegerField(choices=TYPE)


class WallPost(models.Model):
text = models.TextField()
wall = models.ForeignKey(Wall)

我会这样做的。

关于python - Django 中 ForeignKeys、ManyToMany 和 GenericForeignKeys 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11849893/

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