Joh*_*ohn 4 django django-rest-framework
在 Django Rest Framework 3 中,我想返回 pk 关系的 unicode 值,就像使用 serializer.StringRelatedField 一样,但我也需要该值可写。StringRelatedField 是只读的。
我不关心 API 是否接受 PUT 上的 pk 或字符串值(尽管接受字符串会很漂亮,并且可以节省我获取所有 pk 的时间!)。API 只需要在 GET 上返回 unicode 字符串值。
我认为 PrimaryKeyRelatedField 可能是可行的方法,但是查询是什么样的?
例如,如果我想要的模型是“Model”,并且我想要序列化 Model.name,那么这个命令是什么样的:
name = serializers.PrimaryKeyRelatedField(queryset=Model.objects.get(pk=????))
Run Code Online (Sandbox Code Playgroud)
我很挣扎,因为我不知道如何从序列化器对象中获取 pk 以便查询相关模型......
当然,这是假设 PrimaryKeyRelatedField 是我所需要的。这可能是完全错误的。
谢谢
约翰
以下是根据要求提供的示例模型,为了清晰起见,略有更改:
class CarModel(models.Model):
name = models.CharField(max_length=100,unique=True)
def __str__(self):
return self.name
class Car(models.Model):
name = models.CharField(max_length=100)
make = models.ForeignKey(CarMake)
car_model = models.ForeignKey(CarModel)
class CarSerializer(serializers.ModelSerializer):
car_model = serializers.StringRelatedField() //like this, but read/write
class Meta:
model = Car
Run Code Online (Sandbox Code Playgroud)
在此示例中,我正在序列化 Car,尝试返回 CarModel 的字符串值,该值可以使用表单中的选择下拉列表进行更新。如果我使用不同的序列化器,一种用于需要 PK 的 POST,另一种用于返回字符串的其他所有序列,则表单中的 select 指令会变得非常混乱。
因此,理想情况下,我只希望能够 POST 字符串值,并让 API 完成查找并将字符串保存为 PK。
“我只是希望能够 POST 字符串值,并让 API 完成查找并将字符串保存为 PK。”
这意味着“名称”应该是唯一的。如果它不唯一,则查找可能会返回多个实例。在示例中,您当前的“名称”不是唯一的,但如果是,那么您可以使用...
car_model = serializers.SlugRelatedField(queryset=..., lookup_field='name')
Run Code Online (Sandbox Code Playgroud)
我不相信这是否真的是你想要的。澄清此类问题的最佳方法通常是暂时忘记代码,而只专注于您希望输入和输出表示形式的精确描述?...
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |