Djang的foreignkey、manytomy和genericforeignkey的最佳实践

2024-04-26 12:35:43 发布

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

我试图在Django做一堵墙,我已经做出了一个重要的设计决定。在

我有以下几门课:

墙柱, 用户配置文件, 组, 事件

问题是,我有用户配置文件,事件和组都将有墙,可以张贴到。因此,我不能从发布到要发布到的模型的用户建立外键关系,因为有多个模型可以发布(除非我使用通用键,但我觉得必须为所有墙柱(如墙对象)提供一些外壳)。在

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

在django中使用ForeignKeys和ManyToManyFields和GenericForeignKeys的最佳实践是什么?就像你如何判断这段关系应该朝哪个方向发展?在

谢谢你的投入。在


Tags: 对象django用户模型类型关系配置文件事件
1条回答
网友
1楼 · 发布于 2024-04-26 12:35:43
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()

或者

^{pr2}$

我会这么做的。在

相关问题 更多 >