如何根据相关对象设置POST请求的截止日期?

时间:2017-05-13 12:29:07

标签: python django django-rest-framework

我有两个相关的模型:

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

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

我是怎么做到的?

1 个答案:

答案 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