我想从Django视图集中选择不同的字段和一些字段。你知道吗
我的方法
@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)
当我选择这样,错误信息显示
"Got KeyError when attempting to get a value for field
dayno
on serializerShiftSerializer
.\nThe serializer field might be named incorrectly and not match any attribute or key on thedict
instance.\nOriginal exception text was: 'dayno'."
我想只选择shiftid
、shiftdesc
和dayname
,如何只选择这三个字段以及我是否需要创建新的序列化程序?你知道吗
您的
ShiftSerializer
使用__all__
,这意味着它将尝试序列化模型中的所有字段。你知道吗因为您指定的queryset没有包含所有字段(而且它是sum/distinct,所以不应该包含),所以这肯定会失败。你知道吗
有两种选择
1)仅为所需字段创建新的序列化程序,手动指定它们
2)将查询集转换为列表,直接返回即可
如果从查询出来的数据已经是您想要的格式,并且已经是简单JSON序列化的正确类型(没有datetimes,没有
Decimal
,等等),那么最后一种方法是有效的。试试看是否有效。你知道吗相关问题 更多 >
编程相关推荐