我正在尝试建立一个典型的社交网站。主要有两种类型的对象。
- 照片
- 地位
用户可以喜欢照片和状态。(请注意,这两个是互斥的)意味着,我们有两个表 (1) 仅用于图像,其他仅用于状态。
现在,当用户喜欢一个对象(可能是照片或状态)时,我应该如何存储该信息。
我想为此设计一个有效的 SQL 模式。目前我正在使用 Genericforeignkey(GFK)
class LikedObject(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
但是昨天我想如果我可以在不有效使用GFK的情况下做到这一点?
class LikedObject(models.Model):
OBJECT_TYPE = (
('status', 'Status'),
('image', 'Image/Photo'),
)
user = models.ForeignKey(User, related_name="liked_objects")
obj_id = models.PositiveIntegerField()
obj_type = models.CharField(max_length=63, choices=OBJECT_TYPE)
我能理解的唯一区别是,如果我想获取特定用户的所有 like_status,我必须进行两次查询
status_ids = LikedObject.objects.filter(user=user_obj, obj_type='status').values_list('object_id', flat=True)
status_objs = Status.objects.filter(id__in=status_ids)
我对么?那么就易于查询/插入或性能等而言,最好的方法是什么?