【发布时间】:2015-02-24 06:15:08
【问题描述】:
在 Django Rest Framework 3 中,我想返回 pk 关系的 unicode 值,您可以使用 serializer.StringRelatedField 的方式,但我也需要该值是可写的。 StringRelatedField 是只读的。
我不在乎 API 是否接受 PUT 上的 pk 或字符串值(尽管接受字符串会很漂亮,而且我会省去抓取所有 pk 的麻烦!)。 API 只需要在 GET 上返回 unicode 字符串值。
我认为 PrimaryKeyRelatedField 可能是要走的路,但查询是什么样的?
例如,如果我想要的模型是“模型”,并且我希望 Model.name 被序列化,那么这个命令是什么样的:
name = serializers.PrimaryKeyRelatedField(queryset=Model.objects.get(pk=????))
我很苦恼,因为我不知道如何从序列化器对象中获取 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
在此示例中,我正在序列化 Car,试图返回 CarModel 的字符串值,该值可以通过表单中的选择下拉列表进行更新。 如果我使用不同的序列化程序,一个用于期望 PK 的 POST,另一个用于返回字符串的其他所有内容,表单中的 select 指令会变得非常混乱。
因此,理想情况下,我只想能够发布字符串值,并让 API 完成查找并将字符串保存为 PK。
【问题讨论】:
-
您可以编辑您的问题以包括您的模型吗?
-
已添加。希望对您有所帮助。
标签: django django-rest-framework