Django rest框架将POST数据分配给特定用户

Posted

技术标签:

【中文标题】Django rest框架将POST数据分配给特定用户【英文标题】:Django rest framework assign POST data to specific user 【发布时间】:2017-01-02 11:37:45 【问题描述】:

一个月前启动了 Django 和 DRF,但我被困在这部分...我从 android 设备获得了一个 JSON,其中已经包含用户的主键,因此数据被保存给正确的用户。最近我实现了 JWT 令牌认证(来自 Blimp),它的工作就像一个魅力。现在我想删除 JSON 中的主键字段(从 Android 发送)并将数据分配给该登录用户(在 Android 上)。这是一些代码:

models.py

class Izdavatelji(models.Model):
    user = models.ForeignKey(User, default=1)
    name = models.CharField(max_length=100)

class Obrazac(models.Model):
    izdavatelj = models.ForeignKey(Izdavatelji, default='Izdavatelj')
    local = models.CharField(max_length=100)

序列化器.py

class ObrazacSerializer(serializers.ModelSerializer):      
      class Meta:
            model = Obrazac
            fields = ('local', 'izdavatelj')

DRF views.py

class ObrazacList(generics.ListCreateAPIView):
    queryset = Obrazac.objects.all()
    serializer_class = ObrazacSerialize
    permission_classes = (IsAuthenticated,)
    authentication_classes = (JSONWebTokenAuthentication,)

【问题讨论】:

【参考方案1】:
class ObrazacSerializer(serializers.ModelSerializer):   
      izdavatelj = serializers.PrimaryKeyRelatedField(read_only=True)
      class Meta:
            model = Obrazac
            fields = ('local', 'izdavatelj')

class ObrazacList(generics.ListCreateAPIView):
    queryset = Obrazac.objects.all()
    serializer_class = ObrazacSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (JSONWebTokenAuthentication,)

    def perform_create(self, serializer):
        izdavatelj = Izdavatelji.objects.get(user=self.request.user)
        return serializer.save(izdavatelj=izdavatelj)

serializes.py 添加一个指向模型关系的字段并覆盖ListCreateAPIView 中的perform_create(self, serializer) 方法似乎可以完成这项工作。

【讨论】:

以上是关于Django rest框架将POST数据分配给特定用户的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django REST 框架进行批量 POST 时检查记录是不是存在

如何使用 objects.filter() 将字典过滤为 django rest 框架中的 POST 方法

Django Rest 框架 - APIView 分页

Django REST框架:POST请求:仅在数据不存在时如何保存数据

使用 Django REST 框架序列化程序将 JSON 请求保存到数据库

如何在 django rest 框架中仅使用特定变体对象将项目添加到愿望清单?