我有两个相关的模型:
Form:
name
fields
date_deadline
FormEntry:
form = ForeignKey(Form)
data
我想阻止在提交截止日期后添加新条目。我在这样的序列化器中写了一个验证:
class FormEntrySerializer(serializers.ModelSerializer):
def validate(self, data):
from datetime import datetime
form = data.get('form')
if form.date_deadline and\
datetime.date(datetime.today()) > form.date_deadline:
message = 'Entries can\'t be added after submission deadline.'
raise serializers.ValidationError(message)
return data
class Meta:
model = FormEntry
fields = (
'id', 'form', 'data',
)
它有效但我在提交截止日期后也无法更新表单条目。我想仅针对POST请求进行此验证(意味着新插入)。
此外,我不确定这是最好的方法。也许我必须使用权限。
我是怎么做到的?
答案 0 :(得分:1)
您可以检查实例是否存在:
class FormEntrySerializer(serializers.ModelSerializer):
def validate(self, data):
from datetime import datetime
form = data.get('form')
if not self.instance and form.date_deadline and\
datetime.date(datetime.today()) > form.date_deadline:
message = 'Entries can\'t be added after submission deadline.'
raise serializers.ValidationError(message)
return data
class Meta:
model = FormEntry
fields = (
'id', 'form', 'data',
)
如果实例不存在,则创建实例,否则更新。
检查docs。