【发布时间】:2019-07-24 09:12:18
【问题描述】:
我想只从 Django ViewSet 中选择不同的字段和某些字段。
我的方法
@action(methods=['get'], detail=False)
def shiftsum(self, request):
query = (
Shift.objects.values('shiftid', 'dayname')
.annotate(shiftdesc=Max('shiftdesc'))
.annotate(ct=Count('*')) # get count of rows in group
.order_by('shiftid', 'dayname')
.distinct()
)
serializer = self.get_serializer_class()(query,many=True)
return Response(serializer.data)
我的模特
class Shift(models.Model):
shiftid = models.CharField(max_length=15)
shiftdesc = models.CharField(blank = False, null= False, max_length=20)
dayname = models.CharField(blank = False, null= False, max_length=20)
dayno = models.IntegerField(blank = False, null= False)
offin_f = models.IntegerField(blank = False, null= False)
.
.
.
我的序列化器
class ShiftSerializer(serializers.ModelSerializer):
class Meta:
model=Shift
fields = "__all__"
def create(self,validated_data):
validated_data['Created_Usr']="Admin"
validated_data['Created_DT']=datetime.datetime.now()
validated_data['LastModified_Usr']=''
validated_data['LastModified_DT']=None
return Shift.objects.create(**validated_data)
def update(self,instance,validated_data):
instance.shiftdesc = validated_data.get('shiftdesc',instance.shiftdesc)
instance.dayname = validated_data.get('dayname',instance.dayname)
instance.dayno = validated_data.get('dayno',instance.dayno)
instance.offin_f = validated_data.get('offin_f',instance.offin_f)
instance.offout_f = validated_data.get('offout_f',instance.offout_f)
当我这样选择时,会显示错误消息
"在尝试获取字段
dayno的值时出现 KeyError on 序列化程序ShiftSerializer。\n序列化程序字段可能被命名 不正确且不匹配dict上的任何属性或键 实例。\n原始异常文本为:'dayno'。"
我想只选择shiftid、shiftdesc和dayname,如何只选择这三个字段,我需要创建新的序列化程序吗?
【问题讨论】:
-
你能显示完整的回溯吗?
-
@WillemVanOnsem ,请检查更新。谢谢。
标签: python django django-serializer