장고 어드민 인라인에서 proxy 모델을 사용하고 싶을 때

hyuckhoon.ko·2022년 6월 8일
0
# admin.py


class TestModelProxy(Test):
    class Meta:
        proxy = True
        verbose_name = "테스트모델 프록시"
        verbose_name_plural = "테스트모델 프록시"


@admin.register(TestModelProxy)
class TestModelProxyAdmin(admin.ModelAdmin):
    show_full_result_count = False
    ...중략...

    def get_model_perms(self, request):
        return {}


@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):
    show_full_result_count = False
    model = SomeModel
   
    inlines = [
        TestModelApplyInline,
    ]
	
    def get_inline_formsets(self, request, formsets, inline_instances, obj=None):
        from django.contrib.admin import helpers
        inline_admin_formsets = []
        for inline, formset in zip(inline_instances, formsets):
            fieldsets = list(inline.get_fieldsets(request, obj))
            readonly = list(inline.get_readonly_fields(request, obj))
            prepopulated = dict(inline.get_prepopulated_fields(request, obj))
            inline_admin_formset = helpers.InlineAdminFormSet(
                inline, formset, fieldsets, prepopulated, readonly,
                model_admin=self,
            )
            if isinstance(inline, TestModelApplyInline):
                for form in inline_admin_formset.forms:                	
                    # 모델명을 프록시 모델명으로 수정
                    form.instance.fk_name._meta.model_name = TestModelProxy._meta.model_name
            inline_admin_formsets.append(inline_admin_formset)
        return inline_admin_formsets

0개의 댓글