在DRF中嵌套数据时,RelatedObjectDoesNotExist

时间:2019-02-08 04:11:28

标签: python django django-rest-framework

我正在尝试使用嵌套数据序列化其关系的模型。数据在GET请求中正确返回,但是在尝试POST数据时返回以下错误:api.models.Narration.narrative.RelatedObjectDoesNotExist: Narration has no narrative.我对POST嵌套数据没有兴趣,只需要在GET请求中返回即可使用PK。其他地方。我尝试使用Meta.depth以及手动定义字段,这两个字段都返回相同的异常。下面的代码,任何帮助表示赞赏。

# serializers.py
class NarrationSerializer(ModelSerializer):
    narrative = NarrativeSerializer(read_only=True)
    settings = MapSettingsSerializer(read_only=True)
    attached_events = CachedDataSerializer(many=True, read_only=True)

    class Meta:
        model = Narration
        fields = "__all__"
        # depth = 1 [also doesn't work]

# models.py
class Narration(OrderedModel):
    narrative = models.ForeignKey(Narrative, on_delete=models.CASCADE)
    title = models.TextField()
    description = models.TextField()
    date_label = models.CharField(max_length=100)
    map_datetime = models.DateTimeField()
    attached_events = models.ManyToManyField(CachedData)
    img = models.URLField(blank=True, null=True)
    video = models.URLField(blank=True, null=True)
    settings = models.ForeignKey(MapSettings, on_delete=models.CASCADE)

    order_with_respect_to = "narrative"

# views.py
class NarrationViewSet(viewsets.ModelViewSet):
    queryset = Narration.objects.all()
    serializer_class = NarrationSerializer

发布的嵌套数据(使用PK会导致相同的异常):

{
  "title": "cvxcv",
  "description": "cxvxcv",
  "date_label": "test",
  "map_datetime": "0002-01-01T00:00:00Z",
  "img": "",
  "video": "",
  "narrative": {
    "author": "Test Author",
    "title": "Test Narrative",
    "description": "This is a test narrative.",
    "tags": [
      "test",
      "tags"
    ]
  },
  "settings": {
    "bbox": {
      "type": "MultiPoint",
      "coordinates": [
        [
          0,
          0
        ],
        [
          1,
          1
        ]
      ]
    },
    "zoom_min": 1,
    "zoom_max": 12
  },
  "attached_events": [
    {
      "event_type": 178561,
      "wikidata_id": 1,
      "location": {
        "type": "Point",
        "coordinates": [
          0,
          0
        ]
      },
      "date": "0001-01-01",
      "rank": 830700
    }
  ]
}

0 个答案:

没有答案