DRF:验证另一个表中的字段

时间:2018-08-30 16:41:48

标签: django django-rest-framework

我创建了一个API来上传文件。现在,我想添加一些支票,然后用户才能上传。因此,在有效载荷中,我要求他的电子邮件和令牌来验证他。

现在,电子邮件和令牌位于单独的表中。我该如何验证它们。我收到类似

的错误
TypeError: 'email' is an invalid keyword argument for this function

我的模型文件

class File(models.Model):

    filename = models.FileField(blank=False, null=False,upload_to='files')
    remark = models.CharField(max_length=20)
    timestamp = models.DateTimeField(auto_now_add=True)

我的序列化文件

class FileSerializer(serializers.ModelSerializer):

    token = serializers.CharField(label=_("Token"))
    email = serializers.CharField(label=_('email'))

    def validate(self, attrs):
        print("validating params")
        token = attrs.get('token')
        email= attrs.get('email')

        validate(token, email)
        return attrs

    class Meta():
        model = File
        fields = ('filename', 'remark', 'timestamp', 'token', 'email')
        read_only_fields = ('token', 'email')

1 个答案:

答案 0 :(得分:1)

在创建文件(上传)时,您只需要emailtoken,它们也不是模型中的字段,因此您应将它们设置为write_only,并且还应覆盖序列化器中的create方法并将其弹出,然后保存到模型中。

 class FileSerializer(serializers.ModelSerializer):

    token = serializers.CharField(label=_("Token"), write_only=True)
    email = serializers.CharField(label=_('router_macid'), write_only=True)

    def validate(self, attrs):
        print("validating params")
        token = attrs.get('token')
        email= attrs.get('email')

        validate(token, email)
        return attrs

    def create(self, validated_data):
        validated_data.pop('email', None)
        validated_data.pop('token', None)
        return super().create(validated_data)



    class Meta():
        model = File
        fields = ('filename', 'remark', 'timestamp', 'token', 'email')