python - 序列化器字段可能命名不正确,并且与 `QuerySet` 实例上的任何属性或键都不匹配
问题描述
我正在使用 Django Rest,我的请求参数包含:
[
{
"job_role": 2,
"technology": 1
},
{
"job_role": 1,
"technology": 1
},
{
"job_role": 2,
"technology": 1
}
]
我的模型是:
class Technology(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class JobRole(models.Model):
role_name = models.CharField(max_length=100)
def __str__(self):
return self.role_name
class ExpertPricing(models.Model):
role_name = models.OneToOneField(JobRole, related_name="role", on_delete=models.SET_NULL, null=True)
experience_in_years = models.PositiveBigIntegerField()
technology = models.OneToOneField(Technology, related_name="technology", on_delete=models.SET_NULL, null=True)
salary_per_month = models.PositiveBigIntegerField()
我的观点是这样的:
class PricingView(APIView):
def post(self, request):
datas = request.data
data_list = []
for data in datas:
job_role_id = data["job_role"]
technology_id = data["technology"]
job_role = JobRole.objects.get(pk=job_role_id)
technology = Technology.objects.get(pk=technology_id)
expert_pricing = ExpertPricing.objects.filter(role_name=job_role, technology=technology)
if expert_pricing:
data_list.append(expert_pricing)
serializer = ExpertPricingSerializer(data_list, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
序列化程序.py
class TechnologySerializer(serializers.ModelSerializer):
class Meta:
model = Technology
fields = ("id", "name")
class JobRoleSerializer(serializers.ModelSerializer):
class Meta:
model = JobRole
fields = ("id","role_name")
class ExpertPricingSerializer(serializers.ModelSerializer):
role = JobRoleSerializer(many=False, read_only=True)
technology = TechnologySerializer(many=False, read_only=True)
class Meta:
model = ExpertPricing
fields = "__all__"
我无法理解为什么data_list
没有被序列化。
错误说:
AttributeError: Got AttributeError when attempting to get a value for field `experience_in_years` on serializer `ExpertPricingSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.
Original exception text was: 'QuerySet' object has no attribute 'experience_in_years'.
解决方案
由于您在模型中定义了这两个字段 (experience_in_years
和salary_per_month
) 不能为空,因此您似乎需要执行以下操作之一:
- 在您的请求中发送
experience_in_years
和salary_per_month
字段。 - 给这些字段一个默认值
- 做了
null=True, blank=True
如果您执行 2 或 3 个这些解决方案需要迁移,请记住这一点,在完成其中一件事情之后,您应该一切顺利
推荐阅读
- r - 用值和标题标记 geom_hline()
- react-native - 在本机反应中将图像转换为base64
- visual-studio-2017 - Azure Cosmos DB 处于“正在创建”状态
- javascript - jest --watch 或 --watchAll 是否忽略 --runInBand 选项?
- c# - 无法设置字符串 const System.Environment.CurrentDirectory;
- c# - 获得预期的顶级语句(例如“消息”)。同时将 proto 转换为 C#
- swift - SceneKit 着色器修改器
- amazon-web-services - 如何保护 EC2 实例不被立即终止?
- javascript - 编写正文元素以包含css类时如何访问浏览器本地存储
- java - 如何将 URL 作为路径变量传递