我在用着Django 2.x
and Django REST Framework
.
我有一个模型contact
作为外键
class AmountGiven(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
contact = models.ForeignKey(Contact, on_delete=models.PROTECT)
amount = models.FloatField(help_text='Amount given to the contact')
given_date = models.DateField(default=timezone.now)
created = models.DateTimeField(auto_now=True)
和序列化器一样
class AmountGivenSerializer(serializers.ModelSerializer):
mode_of_payment = serializers.PrimaryKeyRelatedField(queryset=ModeOfPayment.objects.all())
contact_detail = ContactSerializer(source='contact', read_only=True)
contact = serializers.PrimaryKeyRelatedField(queryset=Contact.objects.all())
class Meta:
model = AmountGiven
depth = 1
fields = (
'id', 'contact', 'contact_detail', 'amount', 'given_date', 'created'
)
contact
创建新记录时需要字段。但我不想contact
一旦创建即可修改。
但是当我只发送amount
with PUT
它说的方法
{
"contact": [
"This field is required."
]
}
当我使用PATCH
方法,它工作正常,但如果传递一些其他值contact
,正在更新contact
以及。
我要实现contact
field not-required
同时更新现有记录。而且即使通过了,也使用之前的数据,而不是设置新的数据。
Trial 2
我尝试覆盖contact
请求中的字段更改为之前存储的值,以便万一发生更改contact
通过或未通过contact
通过后,会保存之前的一个。
因此,在视图集中添加函数
def update(self, request, *args, **kwargs):
obj = self.get_object()
request.data['contact'] = obj.contact_id
return super().update(request, *args, **kwargs)
但这给出了错误
This QueryDict instance is immutable