python - 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)
解决方案
如果我理解正确,您需要保存,而不是显示用户?在这种情况下,解决方案是:
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)