Reputation: 1786
I have created an API to upload the file. Now I want to add few checks before user can upload it. So in payload I am asking his email and token to validate him.
Now email and token are in separate table. How can I validate them. I am getting errors like
TypeError: 'email' is an invalid keyword argument for this function
my models file
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)
my serializer file
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')
Upvotes: 0
Views: 292
Reputation: 2040
you only want email
and token
when creating a file(uploading) and also they are not fields in your model, so you should make them write_only
and also you should override the create
method in serializers and pop them out before saving into the model.
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')
Upvotes: 1