django rest框架:NOT NULL约束失败

时间:2015-10-30 13:41:41

标签: django django-rest-framework

我想发一个帖子api,
用户会向我namelocation,我会将其保存 但我有一个名为datetime的字段不为空,而且需要计算
请教我如何处理这种情况

我的模特有3个文件:

class Data(models.Model):
    name = models.CharField(max_length=50, null=True, blank=True)
    datetime = models.DateTimeField(auto_now=False, auto_now_add=False)
    location = models.CharField(max_length=255, null=True, blank=True)

serilizers.py

class DataSerializer(serializers.ModelSerializer):
    class Meta:
        model = Data
        fields = (  'name','location' )    

views.py

class DataList(generics.ListCreateAPIView):
    queryset = Data.objects.all()
    serializer_class = DataSerializer

    def pre_save(self, obj):
        obj.datetime = datetime.now()

我在网上找到pre_save()功能,
我认为它可以帮助我保存datetime日期时间字段
但答案是否定的

我处理后如何保存datetime

现在我有错误:

NOT NULL constraint failed: data.datetime

3 个答案:

答案 0 :(得分:2)

由于您使用的是3.x,因此最好的选择是将serializer.save()一个额外的参数传递给对象的保存:

class DataList(generics.ListCreateAPIView):
    queryset = Data.objects.all()
    serializer_class = DataSerializer

    def perform_create(self, serializer):
        serializer.save(datetime=datetime.now())

序列化程序会将datetime参数添加到用于创建实例的validated_data

答案 1 :(得分:0)

我觉得您实际上正在尝试实现auto_now_add = True的功能,您可以在模型级别专门阻止它。

为什么auto_add_now不适合您尝试实现的目标:对象创建的时间戳?

答案 2 :(得分:0)

我有一个类似的问题,我知道这是由ORM试图在非可空字段中插入空值引起的,我正在向API传递正确的参数,但是问题出在序列化程序上,请添加datetime像这样向serilizers.py字段:

class DataSerializer(serializers.ModelSerializer):
class Meta:
    model = Data
    fields = (  'name', 'datetime', 'location' )