У меня есть модели, установленные вверх, как это:Джанго фильтрация админ список изменений/ссылки на другие модели
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
, если у любого из его детей есть игрушки?
Спасибо за ваш ответ, это действительно помогло мне. Я удивлен, что у django нет более элегантного способа для ссылки на список изменений. В любом случае спасибо, ваша помощь решила теперь все мои проблемы. –