read/write 等同于 serializers.StringRelatedField 是什么?

What is the read/write equivalent of serializers.StringRelatedField?

在 Django Rest Framework 3 中,我想要 return pk 关系的 unicode 值,您可以使用 serializer.StringRelatedField 的方式,但我也需要该值是可写的。 StringRelatedField 是只读的。

我不在乎 API 是否接受 PUT 上的 pk 或字符串值(尽管接受字符串会很漂亮,并且可以避免我获取所有 pk!)。 API 只需要 return 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,试图 return CarModel 的字符串值,可以用表单中的 select 下拉列表更新。 如果我使用不同的序列化程序,一种用于 POST 期望 PK,另一种用于 return 字符串的所有其他内容,则表单中的 select 指令会变得非常混乱。

因此,理想情况下,我只想能够 POST 字符串值,并让 API 完成查找并将字符串保存为 PK。

"I just want to be able to POST the string value, and have the API complete the lookup and save the string as a PK."

这意味着 'name' 应该是唯一的。如果它不是唯一的,那么查找可能 return 多个实例。在您当前的示例中 'name' 不是唯一的,但如果是那么您可以使用...

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

我不确定这是否真的是您想要的。澄清这类问题的最好方法通常是暂时忘记代码,只关注对您希望输入和输出表示形式的精确描述?...