django - 带外键的序列化程序 - GET 和 POST

标签 django django-rest-framework

我目前有一个带有外键字段的模型序列化程序。我想要序列化对象的相关模型而不仅仅是一个 ID。我知道这可以通过为相关模型创建序列化器并执行

related_field = RelatedFieldSerializer()

但是,当主对象发生创建/更新时,我该如何处理呢?例如。我想创建一个主对象的实例,但相关字段将作为一个对象(不是 pk)发送,并且不会引用现有的外键,它会尝试创建一个新对象。

希望这是有道理的

最佳答案

如果您不想创建现有的对象,您可以在利用 PrimaryKeyRelatedField 的地方执行类似的操作,如记录 here .

模型.py

class Model1(models.Model):
    time = models.DateTimeField(auto_now=True)

class Model2(models.Model):

    model1= models.ForeignKey(Model1, on_delete=models.CASCADE)
    f1 = models.FloatField()

然后你的 serializers.py 看起来像:

class Model2Serializer(serializers.ModelSerializer):
    model1 = serializers.PrimaryKeyRelatedField(
        read_only=False, queryset=Model1.objects.all())

    class Meta:
        model = Model2
        fields = (
            'model1',
            'f1',
        )

然后可以针对数据库中现有 Model1 值的 pk 值进行发布。请注意,如果需要,您可以使用 pk 值以外的其他值。参见 this post .

关于django - 带外键的序列化程序 - GET 和 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42014287/

相关文章:

node.js - 无法在 Heroku 中安装 Node

javascript - 打字时向数字添加逗号

Django:显示模板中相关项目的总和

django - ModelSerializer 在 Django REST 框架中非常慢

django - 如何将 api 放入 django 中的 celery 任务中?

python - 从 HTML 发起 Skype 通话并记录通话时长

python - Django URL 跟踪其他文件 URL

django - 为什么用户模型具有字符串类型?

Django Rest Swagger 与 APIView

python - 在 REST 框架中返回字典而不是数组