【问题标题】:Django Rest Framework - Set current user on model with unique constraintDjango Rest Framework - 在具有唯一约束的模型上设置当前用户
【发布时间】:2017-11-04 16:56:10
【问题描述】:

我有一个表示设备标识符的模型,我想为设备标识符和当前用户创建一个唯一约束。 我正在通过 save 方法向用户传递,但我不得不删除约束,现在我正在尝试编写测试,我编写的糟糕代码变得难以测试。如何编写一个序列化程序,我可以将当​​前用户设置为默认用户并保持模型上的唯一对比度。

这是我的模特

class DeviceIdentifier(models.Model):
    owner = models.ForeignKey(HDSAuthUser, primary_key=True, on_delete=models.CASCADE)
    id_device = models.UUIDField(primary_key=True)
    insert_date = models.DateTimeField(auto_now_add=True)

这是我的序列化器

class DeviceIdentifierSerializer(serializers.ModelSerializer):
    """
    Device identifier serializer
    """

    class Meta:
        model = DeviceIdentifier
        fields = ('id_device', 'owner')

这是我的观点

class RegisterDevice(CreateAPIView):
    """
    View for registering device for the logged user
    """
    serializer_class = DeviceIdentifierSerializer

    def post(self, request, *args, **kwargs):
        obj = DeviceIdentifierSerializer(data=request.data)
        obj.is_valid()
        obj.save(owner=request.user)

        return Response(True)

【问题讨论】:

    标签: django rest django-models django-rest-framework


    【解决方案1】:

    在模型上添加唯一约束而不是模型序列化器,它肯定会起作用。

    class DeviceIdentifier(models.Model):
        owner = models.ForeignKey(HDSAuthUser, on_delete=models.CASCADE)
        id_device = models.UUIDField(primary_key=True)
        insert_date = models.DateTimeField(auto_now_add=True)
    
          class Meta:
              unique_together = ('field1', 'field2',)
    
    class DeviceIdentifierSerializer(serializers.ModelSerializer):
        """
        Device identifier serializer
        """
    
        class Meta:
            model = DeviceIdentifier
    

    【讨论】:

    • 那景色呢?
    • 您在查看文件时遇到什么问题?
    猜你喜欢
    • 2017-03-27
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2016-06-01
    相关资源
    最近更新 更多