ネストされたシリアライザーの2レベルの深さのスタックがあります。
class ToolSerialier(serializers.ModelSerializer):
input = ToolInputSerializer()
class Meta:
model = Tool
fields = ('docker_image', 'input')
class ToolInputSerializer(serializers.ModelSerializer):
datafile_set = ToolInputDatafileSerializer(many=True)
class Meta:
model = ToolInput
fields = ('datafile_set', )
class ToolInputDatafileSerializer(serializers.ModelSerializer):
class Meta:
model = ToolInputDatafile
fields = ('name', 'file')
およびそれぞれのモデル:
class Tool(models.Model):
docker_image = models.CharField(max_length=255, null=True, blank=True)
class ToolInput(models.Model):
tool = models.ForeignKey(Tool, related_name="input")
class ToolInputDatafile(models.Model):
tool_input = models.ForeignKey(ToolInput, related_name="datafile_set")
name = models.CharField(max_length=255)
file = jsonfield.JSONField()
これで、GETリクエストをToolSerializersリストエンドポイントに送信すると、エラーメッセージが表示されます。
AttributeError at /api/tool/
Got AttributeError when attempting to get a value for field `datafile_set` on serializer `ToolInputSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `RelatedManager` instance.
Original exception text was: 'RelatedManager' object has no attribute 'datafile_set'.
明らかに、何らかの理由で、ToolInputのget()
メソッドが呼び出されず、属性RelatedManager
へのアクセスに失敗しdatafile_set
ます。
どうして?どのような修正を導入する必要がありますか?
あなたはmany=True
議論を逃しています:
class ToolSerialier(serializers.ModelSerializer):
input = ToolInputSerializer(many=True)
FKが逆になっているため、これが必要です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加