【发布时间】:2015-01-18 14:10:24
【问题描述】:
我正在使用 Django Rest Framework 3.0,并且我有一个模型:
class Vote(models.Model):
name = ...
token = models.CharField(max_length=50)
其中token 是我从request IP 信息生成的唯一标识符,以防止同一用户投票两次
我有一个序列化器:
class VoteSerializer(serializers.ModelSerializer):
name = ...
token = serializers.SerializerMethodField()
class Meta:
model = Vote
fields = ("id", "name", "token")
def validate(self, data):
if Rating.objects.filter(token=data['token'], name=data['name']).exists():
raise serializers.ValidationError("You have already voted for this")
return data
def get_token(self, request):
s = ''.join((self.context['request'].META['REMOTE_ADDR'], self.context['request'].META.get('HTTP_USER_AGENT', '')))
return md5(s).hexdigest()
还有一个CreateView
但我得到了一个
KeyError: 'token'
当我尝试发布并创建一个新的Vote 时。为什么验证时数据中不包含token字段?
它可用于将任何类型的数据添加到对象的序列化表示中。
所以我原以为它也会在validate 期间可用?
【问题讨论】:
标签: django django-rest-framework