Пользовательский слот администратора комментариев django

Поэтому я использую встроенное приложение комментариев Djangos (django.contrib.comments) для своего блога. Я внес несколько изменений в отображение форм и т. д. (как описано в документации). И последнее, что меня беспокоит, это то, что модель комментариев находится в отдельной категории в админке, например:

Мое приложение
---Модель1
---Модель2

Комментарии
--- Комментарии

Я хочу, чтобы это было так, поскольку комментарии привязаны к моделям MyApp.

MyApp
---Model1
---Modle2
---Комментарии

Я попытался добиться этого, добавив эту строку кода в admin.py MyApps (перезаписав класс Comment)

class MyAppComment(Comment):

    class Meta(Comment.Meta):
       app_label = 'myapp'

admin.site.unregister(Comment)
admin.site.register(MyAppComment, CommentsAdmin)

И это работает (и модель комментариев отображается в MyApps), но теперь ссылки неверны... модель указывает на:

http://www.mysite.com/admin/myapp/myappcomment/

который выводит ошибку:

нет такой таблицы: myapp_myappcomment

вместо:

http://www.mysite.com/admin/comments/comment/

Это связано с тем, что администратор формирует свои URL-адреса в соответствии с именами приложений и именами моделей ... как я могу просто изменить положение модели комментариев в администраторе, но оставить URL-адреса такими, какие они есть?

Должен быть какой-то способ сделать это?


person Veles    schedule 17.12.2011    source источник
comment
у вас есть run manage.py syncdb?   -  person benjaoming    schedule 17.12.2011
comment
Да... пробовал (удалил базу и начал с нуля)... та же ошибка   -  person Veles    schedule 17.12.2011


Ответы (1)


Вы не «переписали» класс Comment — создав его подкласс, вы фактически создали дочернюю модель, используя наследование нескольких таблиц. Поэтому необходимо создать еще одну таблицу.

Вы можете создать прокси-модель, которая наследуется от Comment, то дополнительные таблицы создавать не нужно.

class MyAppComment(Comment):

    class Meta(Comment.Meta):
        proxy = True

admin.site.unregister(Comment)
admin.site.register(MyAppComment, CommentsAdmin)

Вам не нужно устанавливать app_label, если MyAppComment определено в приложении myapp — оно будет установлено автоматически.

person Alasdair    schedule 17.12.2011