我有以下模型:
class TaggedItem(models.Model):
tag = models.SlugField()
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
我正在尝试以一种可以通过 API 端点分配内容对象的方式序列化此模型
到目前为止,我已经这样做了:
class TaggedItemSerializer(serializers.ModelSerializer):
content_object = serializers.RelatedField(read_only=True)
class Meta:
model = TaggedItem
但是,这是只读的。如果我删除 read_only 参数,我必须为该字段指定查询集。但是,对于这种通用关系,我有许多不同的模型类型。如果我在序列化程序和模型的其他地方指定所有可能的模型类型,我似乎在复制代码。
我还可以通过 object_id 和 content_type 字段设置内容对象,但是当我这样做时会出现错误。
例如:
{
...
object_id: 1,
content_type: 'auth.User'
}
返回 400 响应 "detail": "JSON parse error - Expected object or value"
如何通过 DRF api 使这个 content_object 可写?