显示django admin中链接模型字段的信息



这些是我的模型:

class Partner(models.Model):
name = models.CharField(max_length=200, verbose_name="Organisation name")
class ResearchActivity(models.Model):
title = models.CharField(max_length=200)
partner = models.ManyToManyField(ActivityPartner, blank=True)

我想,在Django管理表单中,有一个字段在我的Partner编辑表单中表示链接到该合作伙伴的ResearchActivity

这可以通过在我的Partner模型中添加一个字段(比如命名为linked_partner),然后像这样编辑我的admin.py来实现吗:
@admin.register(ActivityPartner)
class ActivityPartnerAdmin(admin.ModelAdmin):
search_fields = ['academic',]
autocomplete_fields = ['partnership_type', 'relationship_type', 'academic_links']
def get_changeform_initial_data(self, request):
return {'live_contract': ResearchActivity.objects.all().filter(linked_partner__id=request.ResearchActivity.partner.id)}

?

我刚刚遇到的display() decorator,新的从Django 3.2。有了它,我可以简单地做:

@admin.register(ActivityPartner)
class ActivityPartnerAdmin(admin.ModelAdmin):
search_fields = ['academic',]
autocomplete_fields = ['partnership_type', 'relationship_type', 'academic_links',]
readonly_fields = ('get_ra',)
@admin.display(description='Live contract(s)')
def get_ra(self, obj):
return list(ResearchActivity.objects.filter(partner=obj.id))

实现我想要的。

如果我也想编辑那些manymany关系,我可以使用inlines选项:

class LiveContractsInline(admin.TabularInline):
model = ResearchActivity.partner.through
@admin.register(ActivityPartner)
class ActivityPartnerAdmin(admin.ModelAdmin):
inlines = [
LiveContractsInline,
]

最新更新