gpt4 book ai didi

python - 在 Django DRF 中,我总是在序列化器的更新方法中收到 ValueError

转载 作者:太空宇宙 更新时间:2023-11-03 21:16:18 25 4
gpt4 key购买 nike

我正在使用 Django DRF,并且我已在序列化程序中成功创建了 create 方法,但不知何故更新方法不想按我想要的方式工作。我总是得到相同的 ValueError。

我的模型:

class User(models.Model):
gender = models.CharField(max_length=10, choices=GENDER, default='Male')
first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
position = models.CharField(max_length=50)
birthday = models.DateField(auto_created=False, null=True)
email = models.EmailField(max_length=50)
phone = models.CharField(max_length=15)
password = models.CharField(max_length=100, null=True)


class Company(models.Model):
company_name = models.CharField(max_length=50, blank=False)
address = models.CharField(max_length=50, blank=False)
zip = models.IntegerField(blank=False)
city = models.CharField(max_length=50, blank=False)
email = models.EmailField(max_length=50, blank=False)


class PartnerCompany(models.Model):
partner = models.ForeignKey(Company, on_delete=models.PROTECT)
contact_person = models.ForeignKey(User, on_delete=models.CASCADE)

我的序列化器

class PartnerCompanySerializer(serializers.ModelSerializer):
partner = CompanySerializer(many=False)
contact_person = ClientUserSerializer(many=False)

class Meta:
model = PartnerCompany
fields = '__all__'

def create(self, validated_data):
partner = validated_data.pop('partner')
contact_person = validated_data.pop('contact_person')
partner_instance = Company.objects.create(**partner)
contact_person_instance = User.objects.create(**contact_person)
return PartnerCompany.objects.create(partner=partner_instance,
contact_person=contact_person_instance,
**validated_data)


def update(self, instance, validated_data):
instance.partner = validated_data.get('partner', instance.partner)
instance.contact_person = validated_data.get('contact_person', instance.contact_person)
partner_instance = Company.objects.update(**instance.partner)
instance.save(partner_instance)
return instance

我的观点:

class PartnerCompanyUpdateByID(generics.RetrieveUpdateAPIView):
lookup_field = 'id'
queryset = PartnerCompany.objects.all()
serializer_class = PartnerCompanySerializer

我总是收到这个 ValueError:

ValueError at /partner/update/id/6 Cannot assign "OrderedDict([('company_name', 'UBS Switzerland'), ('address', 'Mainstreet 1'), ('zip', 4102), ('city', 'Basel'), ('email', 'ubs@ubs.ch')])": "PartnerCompany.partner" must be a "Company" instance.

最佳答案

您不应将 partner_instance 作为 instance.save() 中的参数发送。 实例已在合作伙伴中具有新值。

def update(self, instance, validated_data):
instance.partner = validated_data.get('partner', instance.partner)
instance.contact_person = validated_data.get('contact_person', instance.contact_person)
partner_instance = Company.objects.update(**instance.partner)
instance.partner = partner_instance
instance.save()
return instance

关于python - 在 Django DRF 中,我总是在序列化器的更新方法中收到 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54681165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com