У меня есть модель, связанная со связанной моделью, которая представляет собой модель дерева Django MPTT, я хотел бы иметь возможность фильтровать первую модель, используя дерево Django MPTT в консоли администратора.
class Tenders(models.Model):
...
sector=models.ForeignKey(Sector, to_field='sectorId', null=True, blank=True,on_delete=models.CASCADE)
...
class Sector(MPTTModel):
name = models.CharField(max_length = 255)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True,related_name='children')
sectorId = models.IntegerField(default=0,null=True,unique=True)
В администраторе Django я хотел бы настроить фильтры для модели Tenders так, чтобы дерево Django-MPTT было фильтром.
Я пытался использовать следующее:
class adminTenders(admin.ModelAdmin):
def linkTo(self,obj):
return mark_safe("""<a href='{}' target="_blank" >Tender Link</a>""".format(obj.tenderLink))
linkTo.short_description=''
list_display=(
'title',
'linkTo',
'sector',
'region',
'repository',
'id',
)
list_filter=(
('sector', TreeRelatedFieldListFilter),
)
admin.site.register(Tenders,adminTenders)
Однако я получаю следующую ошибку при попытке запустить это, и я не могу понять это:
File "py36/lib/python3.6/site-packages/mptt/admin.py", line 314, in field_choices
mptt_level_indent * levels_dict[pk])
KeyError: 0
Любая помощь будет принята с благодарностью.
Редактировать 1: Я думаю, что изолировал проблему от того факта, что мой внешний ключ в тендерах для секторов использует to_field='sectorId
вместо значения по умолчанию для ссылки на столбец pk
. Это должно было быть сделано для обратной совместимости со старой схемой базы данных, с которой я застрял.