0

我正在尝试在 Django 中创建一个通知系统。有一个notification_type 字段、user_id 和不同表(如评论、关系表)的外键会更好吗?

或者除了它们都有一个 user_id 字段之外,它们还应该为每种类型的通知(如“LikeNotification”、“CommentNotification”等)都有一个单独的表吗?

设计一:


class LikeNotification(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

class CommentNotification(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

class PostNotification(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)


class BondNotification(models.Model):
    bond = models.ForeignKey(Bond, on_delete=models.CASCADE,)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

设计二:


class Notification(models.Model):
    notification_type = models.IntegerField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    like = models.ForeignKey(Like, on_delete=models.CASCADE)
    comment = models.ForeignKey(Comment, on_delete=models.CASCADE)
    bond = models.ForeignKey(Bond, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)


4

1 回答 1

1

使用ContentType

content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')

这样你就可以拥有Foreignkey任何模型

于 2019-09-02T21:40:29.727 回答