Как отобразить (иерархические) элементы объекта в админке django - PullRequest
0 голосов
/ 29 августа 2018

Я использую django 2.0.8 с Python 3.5 и django-threadadedcomments для комментирования функциональности.

Я пытаюсь создать блог (да, я знаю, что существуют приложения для блогов django!), Который поддерживает определенные «социальные» функции:

  1. Возможность ставить лайки в блоге (или любой другой модели)
  2. Возможность сообщать в блоге (или любой другой модели)
  3. Возможность комментировать пост
  4. Возможность большого пальца вверх / вниз и сообщать о комментариях

Как я упоминал ранее, я использую django-threadadedcomments для своей функции комментирования.

Вот некоторые из моих моделей:

Foo / models.py

from django.db import models
from django.contrib.contenttypes.fields import GenericRelation
from threadedcomments.models import ThreadedComment
from django.conf import settings

class AbuseReport(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, blank=False, null=False, default=1, on_delete = models.CASCADE)   


class Reportable(models.Model):
    abuses = GenericRelation(AbuseReport)

    class Meta:
        abstract = True


class Like(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, blank=False, null=False, default=1, on_delete = models.CASCADE)


class Likeable(models.Model):
    likes = GenericRelation(Like)

    class Meta:
        abstract = True

class ThumbVote(models.Model):
    VOTE_TYPES = (
        ('U', 'Upvote'),
        ('D', 'Downvote'),
    )

    owner = models.ForeignKey(settings.AUTH_USER_MODEL, blank=False, null=False, default=1, on_delete = models.CASCADE)    
    vote  = models.CharField(max_length=1, choices=VOTE_TYPES)



class Thumbvoteable(models.Model):
    thumbvotes = GenericRelation(ThumbVote)

    class Meta:
        abstract = True


class ThumbvoteableReportableComment(Thumbvoteable, ThreadedComment):
    pass

Foobar / models.py

from foo.models import ThumbvoteableReportableComment \
                       Likeable, Reportable

# Create your models here.
class Post(Likeable, Reportable):
    pass

class PostComments(ThumbvoteableReportableComment):
    post = models.ForeignKey(Post, related_name='comments', on_delete = models.CASCADE)

Foobar / admin.py

from django.contrib import admin
from .models import Post, PostComments

class PostCommentsInline(admin.TabularInline):
    model = PostComments     
    readonly_fields = ('thumbvotes',)
    fields = ('comment', 'abuse_report_count')  


class PostAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}
    list_display = ('title', 'pub_date')

    inlines = [PostFileInline, PostPictureGalleryInline, PostCommentsInline]

    def save_model(self, request, obj, form, change):
        obj.author = request.user
        obj.save()

# Register your models here.
admin.site.register(Post, PostAdmin)

Когда я захожу на страницу администратора django, возникают следующие проблемы:

  1. Объект Post не имеет поля abuses
  2. Объект Post не имеет поля likes
  3. Форма добавления PostComment не имеет поля abuse_report_count И не имеет поля thumbvote (оба унаследованы от родительских классов)

Как изменить модели и т. Д., Чтобы поля отображались в администраторе администратора?

...