Django rest framework 如果字段不存在,则获取字段值;如果不存在,则获取默认值,DRF
我有一个问题: 例如,我有3个几乎相似的型号:Django rest framework 如果字段不存在,则获取字段值;如果不存在,则获取默认值,DRF,django-rest-framework,Django Rest Framework,我有一个问题: 例如,我有3个几乎相似的型号: Model_A(models.Model) field_1 = …. field_2 = …. field_3 = …. Model_B(models.Model) field_1 = …. field_2 = …. field_3 = …. Model_C(models.Model) field_1 = …. field_2 = …. # no field 3 here 我想在serializers.py中创建一个方法,在其中我可以执行
Model_A(models.Model)
field_1 = ….
field_2 = ….
field_3 = ….
Model_B(models.Model)
field_1 = ….
field_2 = ….
field_3 = ….
Model_C(models.Model)
field_1 = ….
field_2 = ….
# no field 3 here
我想在serializers.py中创建一个方法,在其中我可以执行以下操作:
def funk(self, model)
# model is Model_A, B or C
model.objects.annotate(
result= Coalesce( F(“field_3), Value(value=1,output_field=IntegerField())
).etc_etc_etc…
return something here
目标是这样的:
如果模型中的字段_3确实存在,我想获取它的值,如果不存在,我想从value()
获取默认值
问题是,如果模型中不存在字段3
,它将通过异常而不是只提供逻辑正确的NULL
值
有没有办法通过DB或ORM仪器在DB级别实现这种逻辑
谢谢合并不会处理缺少的列,而是处理不存在的值 但是,您可以通过访问
\u meta
选项检查模型,并查看是否存在此类列,例如:
来自django.core.exceptions导入字段doesnotexist
从django.db.models导入值,IntegerField
def funk(自我,型号):
尝试:
模型._meta.get_字段('field_3'))
除FieldDoesNotExist外:
返回model.objects.annotate(
字段\u 3=值(1,输出\u字段=整数字段()
)
其他:
返回model.objects.all()
您可以“参数化”列名,并运行它(例如多次),为模型中所有缺少的列注入值
from django.core.exceptions import FieldDoesNotExist
from django.db.models import Value, IntegerField
def funk(self, model):
try:
model._meta.get_field('field_3')
except FieldDoesNotExist:
return model.objects.annotate(
field_3=Value(1, output_field=IntegerField())
)
else:
return model.objects.all()