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

zub*_*hav 2 django django-rest-framework

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

related_field = RelatedFieldSerializer()
Run Code Online (Sandbox Code Playgroud)

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

希望这是有道理的

Dav*_*ner 5

如果您不想创建现有对象,您可以使用此处PrimaryKeyRelatedField记录的方式执行类似操作。

models.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()
Run Code Online (Sandbox Code Playgroud)

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

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

    class Meta:
        model = Model2
        fields = (
            'model1',
            'f1',
        )
Run Code Online (Sandbox Code Playgroud)

然后可以针对数据库pk中现有Model1值的值进行发布。请注意,pk如果需要,您可以使用该值以外的其他值。看到这个帖子