在 django 管理中显示有关链接模型字段的信息
Display information about linked models fields in the 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
链接到该合作伙伴。
是否可以通过向我的合作伙伴模型添加一个字段(例如,将其命名为 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))
实现我想要的。
如果我还想编辑那些 ManyToMany 关系,我可以使用 inlines
option:
class LiveContractsInline(admin.TabularInline):
model = ResearchActivity.partner.through
@admin.register(ActivityPartner)
class ActivityPartnerAdmin(admin.ModelAdmin):
inlines = [
LiveContractsInline,
]
这些是我的模型:
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
链接到该合作伙伴。
是否可以通过向我的合作伙伴模型添加一个字段(例如,将其命名为 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))
实现我想要的。
如果我还想编辑那些 ManyToMany 关系,我可以使用 inlines
option:
class LiveContractsInline(admin.TabularInline):
model = ResearchActivity.partner.through
@admin.register(ActivityPartner)
class ActivityPartnerAdmin(admin.ModelAdmin):
inlines = [
LiveContractsInline,
]