首页 > 解决方案 > Django Admin Form,设置只读字段(用户外键字段)的默认值

问题描述

我目前正在开发一个多供应商电子商务网站,在模型中每个项目都有一个用户,我想在添加项目时保存一个用户(只读和项目外键),我不想显示用户字段,如果我使用 readonly_fields 所以我的用户将为空,我该如何实现,请帮助我

管理员

class ItemAdd(admin.ModelAdmin):
    list_display = ['name', 'price','minimum_order','status']
    list_display_links = ['name', 'price','minimum_order',]
    search_fields = ['name', 'description']
    ordering = ('-price',)
    list_filter = ['price', 'status', 'category']
    list_per_page = 25
    list_editable = ['status',]
    
    def get_form(self, request, obj=None, **kwargs):
        form = super(ItemAdd, self).get_form(request, obj, **kwargs)
        form.base_fields['user'].initial = request.user
        return form
    
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(user=request.user)

标签: pythondjangodjango-rest-framework

解决方案


如果我理解正确,您需要保存,而不是显示用户?在这种情况下,解决方案是:

class ItemAdd(admin.ModelAdmin):
    list_display = ['name', 'price','minimum_order','status']
    list_display_links = ['name', 'price','minimum_order',]
    search_fields = ['name', 'description']
    ordering = ('-price',)
    list_filter = ['price', 'status', 'category']
    list_per_page = 25
    list_editable = ['status',]
    
    # instead get_form method
    def save_model(self, request, obj, form, change):
        if not change:
            obj.user = request.user
        super().save_model(request, obj, form, change)

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(user=request.user)


推荐阅读