Правильное отображение ManyToManyField в DjangoAdmin - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь добавить модель 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 в деталях сообщения (т. е. показать пользователей, которым действительно понравилось сообщение, а не список всех пользователей)?

...