[英]how to add current active user as foreign key to the task model in django 3?
[英]How to make current user the foreign key in Django Model
我將Django admin用作客戶端的儀表板(受限權限)。 我允許他們通過管理站點添加新產品,並希望將當前用戶用作Products模型中的外鍵。 我在ProductAdmin中使用“排除”,因此客戶端將無法選擇更改它。 當不使用“排除”時,用戶是默認選擇,並且可以使用。 當我包含“ exclude”時,表單返回錯誤,指出該字段為null。 我如何使當前用戶成為產品模型中的外鍵,無論他們是通過管理表單添加項目還是通過csv上傳項目?
這是我的產品型號:
#models.py
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
class Product(models.Model):
client_id = models.ForeignKey(User, on_delete=models.DO_NOTHING)
title = models.CharField(max_length=200)
asin = models.CharField(max_length=200, blank=True)
sku = models.CharField(max_length=200, blank=True)
date_added = models.DateTimeField(default=datetime.now, blank=True)
in_report = models.BooleanField(default=True)
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(client_id=request.user)
def __str__(self):
return self.title
#admin.py
from django.contrib import admin
from .models import Product
class ProductAdmin(admin.ModelAdmin):
list_display = ('title', 'asin', 'sku', 'in_report')
list_display_links = ('title', 'asin', 'sku')
list_editable = ('in_report',)
search_fields = ('title', 'asin', 'sku', 'in_report')
list_per_page = 50
exclude = ('client_id',)
admin.site.register(Product, ProductAdmin)
我相信您想向用戶隱藏client_id,但是在通過admin保存/更改對象時,您希望當前用戶得到保存。
現在,當您從admin中exclude
client_id時,該字段將不會出現在表單中,這將引發錯誤,因為client_id是必填字段。因此,您可以使用save_model
方法覆蓋admin的save_model
方法:
def save_model(self, request, obj, form, change):
# associating the current logged in user to the client_id
obj.client_id = request.user
super().save_model(request, obj, form, change)
因此,無論何時更改/添加對象,當前用戶都將被分配給client_id。希望它會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.