Django Rest Framework用户外键

时间:2019-02-07 22:07:14

标签: django serialization django-rest-framework

我正在使用基本的Django Auth用户进行用户处理,并且可以进行身份​​验证。现在,我正在尝试为我的Rest API创建一个Post方法,该方法自动从请求中获取用户,然后获取所有数据输入并保存。

我尝试了各种序列化尝试。我还只是一个简单的Django网站而已,但现在将它变成API变得越来越有趣。

这是我的模特:

class UserIncome(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
                       on_delete=models.CASCADE)
    preTaxIncome = models.DecimalField(max_digits=15, decimal_places=2)
    savingsRate = models.DecimalField(max_digits=3, decimal_places=2)
    taxRate = models.DecimalField(max_digits=3, decimal_places=2)

这是我的序列化器(基本,不尝试制作外键):

class UserIncomeSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserIncome
        fields = ('id', 'user', 'preTaxIncome', 'savingsRate', 'taxRate')

这里是视图(再次,只是基础。没有尝试使用外键):

class UserIncomeList(APIView):
    #List all snippets, or create a new snippet.
    def get(self, request, format=None):
        userIncome = models.UserIncome.objects.get(user=request.user)
        serializer = Serializers.UserIncomeSerializer(userIncome, many=False)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = Serializers.UserIncomeSerializer(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)

我应该只将外键用作用户ID并以某种方式获取它吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

我知道了!

我从序列化程序中删除了用户字段,然后在UserIncomeList的post方法中创建了save方法:

serializer.save(user = request.user)