我创建了一个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')
答案 0 :(得分:1)
在创建文件(上传)时,您只需要email
和token
,它们也不是模型中的字段,因此您应将它们设置为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')