您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将现有字段设为只读,但允许在django admin中创建新的内联时添加

将现有字段设为只读,但允许在django admin中创建新的内联时添加

我找到了答案。我们需要插入一个构造表单,然后像我一样从内联类中调用此表单,如下所示:

class requiredInlineFormSet(BaseInlineFormSet):
"""
Generates an inline formset that is required
"""
    def _construct_form(self, i, **kwargs):
    """
    Override the method to change the form attribute empty_permitted
    """
        form = super(requiredInlineFormSet, self)._construct_form(i, **kwargs)
        form.empty_permitted = False
        return form

class FollowUpAddInLine(admin.TabularInline):
    model = md.FollowUp
    extra = 1
    formfield_overrides = {
    models.CharField: {'widget': TextInput(attrs={'size':'20'})},
    models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':40})},
}

    can_delete = False
    formset = requiredInlineFormSet

    def has_change_permission(self, request, obj=None):
        return False

class FollowUpListInLine(admin.TabularInline):
    model = md.FollowUp
    readonly_fields = ('status', 'follow_up_date', 'followup_status', 'followup_reason', 'remarks', 'followup_done_by')
    extra = 0
    can_delete = False
    formset = requiredInlineFormSet

    def has_add_permission(self, request):
        return False

class FollowUpAdminInLine(admin.TabularInline):
    model = md.FollowUp
    extra = 1
    formfield_overrides = {
    models.CharField: {'widget': TextInput(attrs={'size':'20'})},
    models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':40})},
}

    formset = requiredInlineFormSet

    def queryset(self, request):
        return md.FollowUp.objects.filter(owner=request.user)

class PackageAdmin(admin.ModelAdmin):
"""Makes the FollowUp to be added along with the Package"""
    inlines =(FollowUpListInLine, FollowUpAddInLine)
    fields = ('date_of_inquiry', 'agent_name', 'type_of_booking',
                  'no_of_pax', 'source_of_inquiry', 'business_vendor',
              'travel_date', 'reply_date', 'client_name',
              'client_email', 'client_contacts', 'inquiry_assigned_to',
              'inquiry_assigned_by')
    list_display = ('agent_name', 'date_of_inquiry','status_color')
    list_filter = ('date_of_inquiry',)
    can_delete = False
    list_per_page = 25

    def get_readonly_fields(self, request, obj=None):
    if request.user.is_superuser == False:
        if obj: # editing an existing object
            return self.readonly_fields + (
                        'agent_name',
                        'date_of_inquiry',
                         )

        else:
            self.inlines = (FollowUpAdminInLine,)   
        return self.readonly_fields

    def queryset(self, request):
"""Limit Pages to those that belong to the request's user."""
        qs = super(PackageAdmin, self).queryset(request)
        if request.user.is_superuser:
           return qs
        return qs.filter(inquiry_assigned_to=request.user)

admin.site.register(md.Package,PackageAdmin)
Go 2022/1/1 18:40:21 有492人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶