Я пытаюсь добавить модель Likes в приложение Posts, чтобы оно записывало каждый раз, когда пользователь «любит» определенный пост. Я уже добавил поле лайков в модель Posts как ManyToManyField и попытался зарегистрировать его для отображения в Django Admin, точнее в деталях Post, но результат кода, который я имею, отображает только список всех пользователи, где должен быть только список пользователей, которым понравился соответствующий пост.
Вот код для моей модели сообщений:
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
# ForeignKey that relates the post to the user that published it and their corresponding profile.
user = models.ForeignKey(User, on_delete=models.PROTECT)
profile = models.ForeignKey('users.Profile', on_delete=models.PROTECT)
title = models.CharField(max_length=255)
photo = models.ImageField(upload_to='posts/pics')
description = models.TextField(max_length=2000, blank=True)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
# ManyToManyField that translates to the users that have liked the post
likes = models.ManyToManyField(User, blank=True, related_name='post_likes')
def __str__(self):
return '{} by {}'.format(self.title, self.user.username)
def get_likes(self):
return '\n'.join([l.likes for l in self.likes.all()])
Также это код для администратора. py файл.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = (
'pk',
'user',
'title',
'photo',
'created',
'modified',
'get_likes',
)
list_display_links = ('pk', 'title',)
list_editable = ('photo',)
search_fields = (
'post__user',
'post__title'
)
list_filter = (
'created',
'modified'
)
fieldsets = (
('Profile', {
'fields' : (
'user',
)
}),
('Post', {
'fields' : (
'title',
'photo',
'likes',
)
})
)
Как мне заставить администратора Django правильно отобразить ManyToManyField в деталях сообщения (т. е. показать пользователей, которым действительно понравилось сообщение, а не список всех пользователей)?