使用viewsets.ModelViewSet视图更新Django rest框架模型中的外键 [英] Update foreign key in Django rest framework model using viewsets.ModelViewSet view

查看:37
本文介绍了使用viewsets.ModelViewSet视图更新Django rest框架模型中的外键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对DRF比较陌生,很难通过 POST 请求更新模型中的外键.

I am relatively new to DRF and having hard time updating the foreign key in my model via POST request.

    # Model for Event.

        class Event(models.Model):
              heading = models.TextField()
              event_construction_site = models.ForeignKey(
                  ConstructionSite, on_delete=models.CASCADE, related_name='construction_site_events', null=True)
            
              def __str__(self):
                  return str(self.id)
    
    
        class ConstructionSiteShortSerializer(serializers.ModelSerializer):
            class Meta:
                model = ConstructionSite
                fields = ['id']
    
     # Serializer for Event.

        class EventSerializer(serializers.ModelSerializer):
            event_construction_site = ConstructionSiteShortSerializer()
            event_posted_by = CustomUserSerializer()
        
            class Meta:
                model = Event
                fields = ('id', 'heading', 'event_construction_site')

我的 GET 响应的结构如下:

  {
    id: 1,
    heading: "Truck with formwork arrived",
    event_construction_site: {
      id: 3
    }
  }

我在这里关心的是如何更新 event_construction_site id ?

My concern here is how can I update the id of event_construction_site?

我尝试过如下更新:

{
    "heading": "a",
    "event_construction_site": {"id": 2}
}

对嵌套的字段 event_construction_site id 进行替换,我得到一个错误,指出=>

Dute to id of event_construction_site being nested field I get an error that says =>

The `.create()` method does not support writable nested fields by default.

推荐答案

您可以使用PrimaryKeyRelatedField.

You can use a PrimaryKeyRelatedField.

class EventSerializer(serializers.ModelSerializer):
            event_construction_site = serializers.PrimaryKeyRelatedField(queryset=ConstructionSite.objects.all())
            event_posted_by = CustomUserSerializer()
        
            class Meta:
                model = Event
                fields = ('id', 'heading', 'event_construction_site')

这篇关于使用viewsets.ModelViewSet视图更新Django rest框架模型中的外键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆