我有两个这样的相关模型:

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请求进行验证(意味着新插入)。

另外,我不确定这是否是最好的方法。也许我必须使用权限。

我该怎么做?

最佳答案

您可以检查一个实例是否存在:

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

07-24 09:52