题目描述:
在收藏功能设计的时候我们通过定义:
class UserFavorite(BaseModel):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name="用户")
fav_id = models.IntegerField(verbose_name="数据id")
fav_type = models.IntegerField(choices=((1,"课程"),(2,"课程机构"),(3,"讲师")), default=1, verbose_name="收藏类型")
class Meta:
verbose_name = "用户收藏"
verbose_name_plural = verbose_name
def __str__(self):
return "{user}_{id}".format(user=self.user.username, id=self.fav_id)
这里设计的时候确实比较灵活,但是在 django 中如果能定义成外键会更加的方便,能否在这里定义成外键呢?注意:课程中分析过,这里如果定义 course、courseorg、teacher 等外键虽然可以使用,但是字段浪费, 而且后期还增加了新的收藏类型我们就需要改表了,有没有方法可以解决这些问题:既可以使用外键,又不用定死外键类型?
思路点拨:
django 有 GenericRelation 和 GenericForeignKey 两个类型可以解决上述问题,但是这两个类型的理解需要我们理解到 django 的 contentType,所以这三个功能都需要理解到。