簡體   English   中英

Django 管理表單,設置只讀字段(用戶外鍵字段)的默認值

[英]Django Admin Form, Set the default value of readonly Field (User Foreign Key Field )

我目前正在開發一個多供應商電子商務網站,在 model 中,每個項目都有一個用戶,我想在添加項目時保存一個用戶(只讀和項目外鍵),我不想顯示用戶字段,如果我使用 readonly_fields 所以我的用戶將是 null,我該如何實現,請幫助我

管理員

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM