Фильтрация списка изменений администратора Django / ссылка на другие модели

У меня модели настроены следующим образом:

class ParentModel(models.Model):
    some_col = models.IntegerField()
    some_other = models.CharField()

class ChildModel(models.Model)
    parent = models.ForeignKey(ParentModel, related_name='children')

class ToyModel(models.Model)
    child_owner = models.ForeignKey(ChildModel, related_name='toys')

Теперь в моей панели администратора, когда я открываю список изменений для ParentModel , мне нужно новое поле / столбец в list_display со ссылкой для открытия списка изменений ChildModel , но с примененным фильтром, чтобы отображать только дочерние элементы от выбранного родителя. На данный момент я понял это с помощью этого метода, но я думаю, что есть более чистый способ сделать это, я просто не знаю, как:

class ParentAdmin(admin.ModelAdmin)
    list_display = ('id', 'some_col', 'some_other', 'list_children')
    def list_children(self, obj):
        url = urlresolvers.reverse('admin:appname_childmodel_changelist')
        return '<a href="{0}?parent__id__exact={1}">List children</a>'.format(url, obj.id)
    list_children.allow_tags = True
    list_children.short_description = 'Children'        

admin.site.register(Parent, ParentAdmin)

Итак, мой вопрос, можно ли добиться того же без этого "взлома ссылок" ? Также можно указать в отдельном столбце в списке изменений ParentModel , есть ли у кого-либо из его дочерних элементов игрушки?

9
задан Gordon Freeman 19 December 2011 в 07:52
поделиться