2017-07-08 74 views
0

我的Category模型與User有關,但我找不到將登錄用戶的ID存儲在的user_id字段中的方法。在創建相關模型時保存用戶外鍵

Categorymodels.py

class Category(models.Model): 
    user = models.ForeignKey(User, default=None) 
    name = models.CharField(max_length=32, unique=True) 

views.py

class CategoryList(APIView): 
    ... 
    def post(self, request): 
     """ 
     Create a new Category 
     :param request: 
     :return: Category 
     """ 
     user_id = request.user.pk 
     serializer = CategorySerializer(data=request.data) 

     if serializer.is_valid(): 
      serializer.save() 

      return Response(serializer.data, status=HTTP_201_CREATED) 

     return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) 

我可以訪問request.user.pk,看看它的正確顯示,但我想不通我怎麼可以存儲這個值當創建一個新的類別。

回答

1

要添加當前用戶ID給新的記錄,你可以通過當前用戶爲save參數:

if serializer.is_valid(): 
    serializer.save(user=request.user) 

也可以更改序列化和使用CurrentUserDefault

user = serializers.HiddenField(default=serializers.CurrentUserDefault()) 

從文檔:

可用於表示當前用戶的默認類。爲了使用它,在實例化序列化程序時,'request'必須作爲上下文字典的一部分提供。

所以使用CurrentUserDefault需要傳遞請求串行鑑於:

serializer = CategorySerializer(data=request.data, context={'request': request}) 
+0

只有第一個選項工作。謝謝。 – mfgabriel92