我想发一个帖子api,
用户会向我name
和location
,我会将其保存
但我有一个名为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
答案 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' )