【发布时间】:2019-03-20 09:40:46
【问题描述】:
我正在使用 Django rest Api 构建一个项目。我有一个名为 DriverProfile 的模型现在我必须添加一个驱动程序配置文件,但出现以下错误:
尝试获取字段 phone 的值时出现 AttributeError
在序列化程序DriverProfileCreateSerializer 上。序列化程序字段可能命名不正确,并且与QuerySet 实例上的任何属性或键都不匹配。原始异常文本是:“QuerySet”对象没有属性“电话”
我使用了 APIView 和 modelSerializer,但我不知道为什么会出现,而 DriverProfile 中存在 phone 字段。 重要的是,当我从通用视图而不是 APIView 执行此操作时,它可以工作,但是当我使用模型序列化程序和 API 视图时,它会引发错误。我猜错误是在我使用 driverprofile = DriverProfile.objects.all 的模型序列化程序中的 create() 中(),我无法排序,请高人指点。
Models.py:
class Driver(models.Model):
User=models.ForeignKey(User,on_delete=models.CASCADE)
objects = models.Manager()
class DriverProfile(models.Model):
driver=models.OneToOneField(Driver,on_delete=models.CASCADE)
drive_name=models.CharField(max_length=20,blank=True)
phone=models.CharField(max_length=12)
driver_cnic=models.CharField(max_length=13)
Views.py
class CreateDriverProfile(APIView):
def get(self,request):
return Response([DriverProfileCreateSerializer(driver).data for driver in DriverProfile.objects.all()])
def post(self,request):
payload=request.data
serializer=DriverProfileCreateSerializer(data=payload)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_201_CREATED)
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
Serializer.py:
class DriverProfileCreateSerializer(serializers.ModelSerializer): # create driver profile
class Meta:
model=DriverProfile
fields = '__all__'
def create(self, validated_data):
driverprofile = DriverProfile.objects.all()
return driverprofile
def update(self, instance, validated_data):
for k, v in validated_data.items():
setattr(instance, k, v)
instance.save()
return instance
【问题讨论】:
标签: django-rest-framework django-serializer