在 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=????))

我很挣扎,因为我不知道如何从序列化程序对象中获取 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。

最佳答案



这意味着“名称”应该是唯一的。如果它不是唯一的,那么查找可能会返回多个实例。在示例中,您当前拥有的 'name' 不是唯一的,但如果是,那么您可以使用...

car_model = serializers.SlugRelatedField(queryset=..., lookup_field='name')

我不相信这是否真的是你想要的。澄清这类问题的最佳方法通常是暂时忘记代码,而只专注于对您希望输入和输出表示是什么样子的精确描述?...

关于django - serializers.StringRelatedField 的读/写等价物是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28689281/

10-13 02:53