我正在使用Django-REST-Framework编写一个联系人服务。
我有一个
很不幸,'validated_data'参数没有带来我的PhoneNumber对象的'id',因为'id'字段是AutoFields,而AutoFields在DRF中是只读的(这在这里有解释)。
我是否有办法在我的更新方法中访问我的'id'字段?(真的非常需要它)
谢谢。
Contact
模型和一个PhoneNumber
模型,其中包含一个外键字段,显示它属于哪个联系人。
以下是我的模型:class ContactModel(models.Model):
firstname = models.CharField(max_length=50, blank=False)
lastname = models.CharField(max_length=50, blank=False)
class PhoneNumber(BaseModel):
country_code = models.CharField(max_length=VERY_SHORT_STRING_SIZE, blank=False)
phone_number = models.CharField(max_length=SHORT_STRING_SIZE, blank=False, null=False)
label = models.CharField(max_length=NORMAL_STRING_SIZE, blank=True, default='')
related_contact = models.ForeignKey(to='ContactModel', on_delete=models.CASCADE)
我想为我的联系人创建一个CRUD API。我有一个ModelViewSet和一个ModelSerializer。序列化器代码如下:
class ContactSerializer(serializers.ModelSerializer):
phonenumber_set = PhoneSerializer(many=True, required=False)
class Meta:
model = ContactModel
fields = '__all__'
class PhoneSerializer(serializers.ModelSerializer):
class Meta:
model = PhoneNumber
fields = ['id', 'country_code', 'phone_number', 'label']
正如此处所述,我应该重写update和create方法以更新和创建Contact的电话号码。
问题是,如果我覆盖这些函数,我必须像这样使用它们:
class ContactSerializer(serializers.ModelSerializer):
...
def create(self, validated_data):
# some code for creating both PhoneNumber and Contact
def update(self, instance, validated_data):
# some code for updating both PhoneNumber and Contact
很不幸,'validated_data'参数没有带来我的PhoneNumber对象的'id',因为'id'字段是AutoFields,而AutoFields在DRF中是只读的(这在这里有解释)。
我是否有办法在我的更新方法中访问我的'id'字段?(真的非常需要它)
谢谢。
instance
是将要更新的对象,所以你应该在那里查看,但是让我们看看。 - Mahmoud Adel