Django rest framework Django Rest Framework序列化程序如何根据数据库查询设置默认值

Django rest framework Django Rest Framework序列化程序如何根据数据库查询设置默认值,django-rest-framework,Django Rest Framework,我想为模型字段设置一个默认值,该值取决于数据库查询的结果。为此,我尝试了以下方法: def get_default_value(): try: return SomeOtherModel.objects.all().aggregate(Max('somevalue'))['somevalue__max'] + 1 except: return 0 class FixedTargetSerializer(serializers.ModelSeria

我想为模型字段设置一个默认值,该值取决于数据库查询的结果。为此,我尝试了以下方法:

def get_default_value():
    try:
        return SomeOtherModel.objects.all().aggregate(Max('somevalue'))['somevalue__max'] + 1
    except:
        return 0

class FixedTargetSerializer(serializers.ModelSerializer):
    position = PointField(default=None)
    dependent_value = serializers.IntegerField(default=get_default_value())

    class Meta:
        model = FixedTarget
        fields = '__all__'
但是,函数调用只计算一次,并且与数据库中发生的更改无关,始终使用相同的值(第一次调用时正确的值)作为默认值。只有在重新启动(开发)服务器之后,才会在后续api调用中使用数据库中新的正确值。然而,第页的文件提到了以下内容:

可以设置为函数或其他可调用的,在这种情况下,每次使用该值时都会对其进行求值。调用时,它将不接收任何参数


那么我的错误在哪里呢?为post请求中未设置且依赖于数据库查询的字段设置默认值的适当方法是什么?

问题在于模型定义。您提到了
默认值
作为一个
函数
,它返回一个值,在迁移过程中,DB将其视为一个硬编码的默认值,而不是动态默认值。

因此,将默认值更改为
default=从中获取默认值
default=get\u default\u value()


完整模型定义

class FixedTargetSerializer(serializers.ModelSerializer):
    position = PointField(default=None)
    dependent_value = serializers.IntegerField(default=get_default_value) # don't put paranthesis [ie, "()"] for the function

    class Meta:
        model = FixedTarget
        fields = '__all__'
class FixedTargetSerializer(serializers.ModelSerializer):
位置=点域(默认值=无)
dependent_value=serializers.IntegerField(default=get_default_value)#不要为函数放置paradensis[ie,“()”]
类元:
模型=固定目标
字段='\uuuu所有\uuuu'

图像参考