我正在写一个DjangoREST框架API。我的模型有默认的DjangoPK供内部使用,uuid字段供外部引用。
class BaseModel(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
class Event(BaseModel):
title = models.TextField()
location = models.ForeignKey('Location', null=True, on_delete=models.SET_NULL)
class Location(BaseModel):
latitude = models.FloatField()
longitude = models.FloatField()
以及我的序列化器:
class BaseSerializer(serializers.ModelSerializer):
default_fields = ('uuid',)
class EventSerializer(BaseSerializer):
class Meta:
model = Event
lookup_field = 'uuid' # This does not work
fields = BaseSerializer.default_fields + ('title', 'location',)
class LocationSerializer(BaseSerializer):
class Meta:
model = Location
lookup_field = 'uuid' # This does not work
fields = BaseSerializer.default_fields + ('latitude', 'longitude',)
这工作正常,这是我得到的当我检索一个事件:
{
"uuid": "ef33db27-e98b-4c26-8817-9784dfd546c6",
"title": "UCI Worldcup #1 Salzburg",
"location": 1 # Note here I have the PK, not UUID
}
但我想要的是:
{
"uuid": "ef33db27-e98b-4c26-8817-9784dfd546c6",
"title": "UCI Worldcup #1 Salzburg",
"location": "2454abe7-7cde-4bcb-bf6d-aaff91c107bf" # I want UUID here
}
当然,我希望这个行为对我所有的ForeignKeys和ManyToMany字段都有效。有没有一种方法可以定制DRF用于嵌套模型的字段?谢谢!
3条答案
按热度按时间0sgqnhkj1#
样本使用:
请注意,从Django版本4开始,
smart_text
和ugettext_lazy
被移除,请使用smart_str
和gettext_lazy
来代替它们:cgfeq70w2#
我的一个朋友给我这个解决方案:它适用于我所有的相关对象。
ih99xse13#
对于嵌套模型字段,可以在序列化程序中使用
source
参数,如下所示