@avigmati

Как переопределить имена объектов в forms.ModelMultipleChoiceField в Django Admin?

Модели:
class PostTag(models.Model):
    title = models.CharField(max_length=255)

class Post(models.Model):
    title = models.CharField(max_length=255)
    post_tag = models.ManyToManyField(PostTag, null=True, blank=True)

Админка:
class PostAdmin(ModelAdmin):
    filter_horizontal = ('post_tag',)

Отображается список тегов, но мне нужно добавить к имени тега количество постов у этого тега. Как такое сделать?
  • Вопрос задан
  • 2610 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FireGM
https://docs.djangoproject.com/en/1.7/ref/contrib/...

там много примеров. Если вкратце, то создаёте у модели новую функцию, которая возвращает количество. Добавляем allow_tags. Идём в админку и прописываем lists_display. Всё.
Правда я для manytomany не использовал. Только для foreignkey.
UPD:
Решил проверить, все нормально работает. Только не совсем то, но принцип понятен.
models.py
from django.utils.html import format_html

class PostTag(models.Model):
    title = models.CharField(max_length=255)

    def __str__(self):
        return self.title

    def get_count_posts(self):
        return format_html('<span style="color: red">{0}</span>', self.post_set.count())

    get_count_posts.allow_tags = True

class Post(models.Model):
    title = models.CharField(max_length=255)
    post_tag = models.ManyToManyField(PostTag, null=True, blank=True)

    def __str__(self):
        return self.title


admin.py
from games.models import PostTag, Post


class PostTagAdmin(admin.ModelAdmin):
    list_display = ('title', 'get_count_posts')


admin.site.register(PostTag, PostTagAdmin)
admin.site.register(Post)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы