加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在django rest框架模型中创建created_by字段?

发布时间:2020-12-20 11:52:15 所属栏目:Python 来源:网络整理
导读:我想在 django rest框架模型中创建一个created_by字段. 它应该包含当前登录用户的user_id,它应该是我不需要在JSON格式的POST请求期间发送它,它应该从请求本身获取,我如何使用django rest framework serializer实现它. models.py文件: class Company(models.
我想在 django rest框架模型中创建一个created_by字段.

它应该包含当前登录用户的user_id,它应该是我不需要在JSON格式的POST请求期间发送它,它应该从请求本身获取,我如何使用django rest framework serializer实现它.

models.py文件:

class Company(models.Model):
    """Company model for information about company."""

    created_by = models.ForeignKey(User,null= True,blank= True,on_delete=models.CASCADE)
    company_name = models.CharField(max_length=100)

serializers.py文件:

class CompanySerializer(serializers.ModelSerializer):
"""Serializer for companies."""

    class Meta:
        model = Company
        fields = ('id','created_by','company_name')

v1.py文件:

class CompanyList(APIView):
"""Get and post companies data."""

    def get(self,request,format=None):
        """Get companies data.."""
        companies = Company.objects.all()
        serialized_companies = CompanySerializer(companies,many=True)
        return Response(serialized_companies.data)

    def post(self,format=None):
        """Post companies data."""
        serializer = CompanySerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

解决方法

方法-1:使用 CurrentUserDefault()选项

您可以将created_by字段中的default参数作为serializers.CurrentUserDefault()传递,它将其值设置为当前用户.

class CompanySerializer(serializers.ModelSerializer):
"""Serializer for companies."""

    class Meta:
        model = Company
        fields = ('id','company_name')
        extra_kwargs = {'created_by': {'default': serializers.CurrentUserDefault()}}

方法2:在serializer.save()中传递用户

您可以将created_by字段设置为read_only,然后将request.user传递给serializer.save().

serializers.py

class CompanySerializer(serializers.ModelSerializer):
"""Serializer for companies."""

    class Meta:
        model = Company
        fields = ('id','company_name')
        extra_kwargs = {'created_by': {'read_only':True}}

v1.py

class CompanyList(APIView):
"""Get and post companies data."""

    def post(self,format=None):
        """Post companies data."""
        serializer = CompanySerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(created_by=request.user) # pass current user
            return Response(serializer.data,status=status.HTTP_400_BAD_REQUEST)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读