【发布时间】:2021-07-21 19:20:29
【问题描述】:
我正在 Django-REST-Framework 中编写联系人服务。
我有一个Contact 模型和一个PhoneNumber 模型,它有一个foreignKey 字段,显示它属于哪个联系人。
这是我的模型:
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']
正如 here 指定的那样,我应该重写 update 和 create 方法,以便更新和创建我的联系人的 PhoneNumbers。
问题是,如果我重写这些函数,我必须像这样使用它们:
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 中将是只读的(已解释 Here )。
有没有办法让我在我的更新方法中访问我的“id”字段? (有点需要)
谢谢。
【问题讨论】:
标签: python django django-rest-framework django-serializer