首页 > 解决方案 > Django Rest Framework 用户外键

问题描述

我正在使用基本 Django Auth User 进行用户处理,并且身份验证正常工作。现在我正在尝试为我的 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 并以某种方式获取?谢谢!

标签: djangoserializationdjango-rest-framework

解决方案


我想到了!

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

serializer.save(user = request.user)

推荐阅读