Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added likes/__init__.py
Empty file.
15 changes: 15 additions & 0 deletions likes/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django.contrib import admin
from likes.models import Like


@admin.register(Like)
class LikeAdmin(admin.ModelAdmin):
list_display = (
'user',
'content_type',
'object_id',
'content_object',
'created_at',
)
list_filter = ('content_type',)
date_hierarchy = 'created_at'
5 changes: 5 additions & 0 deletions likes/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class LikesConfig(AppConfig):
name = 'likes'
Empty file added likes/migrations/__init__.py
Empty file.
35 changes: 35 additions & 0 deletions likes/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from django.contrib.auth.models import User
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models


class Like(models.Model):
object_id = models.PositiveIntegerField()
content_type = models.ForeignKey(
ContentType,
on_delete=models.SET_NULL,
null=True,
)
# user liked content_object at created_at
content_object = GenericForeignKey('content_type', 'object_id')
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
created_at = models.DateTimeField(auto_now_add=True)

class Meta:
# 这里使用 unique together 也就会建一个 <user, content_type, object_id>
# 的索引。这个索引同时还可以具备查询某个 user like 了哪些不同的 objects 的功能
# 因此如果 unique together 改成 <content_type, object_id, user>
# 就没有这样的效果了
unique_together = (('user', 'content_type', 'object_id'),)
# 这个 index 的作用是可以按时间排序某个被 like 的 content_object 的所有 likes
index_together = (('content_type', 'object_id', 'created_at'),)

def __str__(self):
return '{} - {} liked {} {}'.format(
self.created_at,
self.user,
self.content_type,
self.object_id,
)

1 change: 1 addition & 0 deletions twitter/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
'friendships',
'newsfeeds',
'comments',
'likes',

]

Expand Down