Django Admin Form,设置只读字段(User Foreign Key Field)的默认值



我目前在一个多供应商电子商务网站上工作,在模型中,每个项目都有一个用户,我想在添加项目时保存一个用户(只读和项目外键(,我不想显示用户字段,如果我使用readonly_fields,那么我的用户将为null,我该如何实现这一点,请帮助我

管理员.PY

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)

最新更新