ネストされたシリアライザでDjango Rest Frameworkを使用して追加の属性を渡す際に問題が発生しています。追加の属性をネストされたシリアライザに完全に渡す
私はドキュメントのForeignKey オーナー /クリエイターの関係を持つモデル、および他のいくつかのForeignKey関連のモデルを作成しました。他のモデルの一部には、オーナー /作成者ForeignKeyも関連付けられています。
class Document(models.Model):
owner = models.ForeignKey('auth.User',related_name='document')
candidate = models.ForeignKey(
Candidate,
on_delete=models.CASCADE,
blank=True,
null=True,
)
class Candidate(models.Model):
owner = models.ForeignKey('auth.User', related_name='candidates')
first_name = models.CharField(max_length=30, blank=True, null=True)
ネストされたシリアライザおよびカスタムcreate()
方法文書モデルを下に保存し、私がダウンしてすべてのフィールドを渡すことができます、しかし、ネストされたモデルは、所有者フィールドを拾うことができるようには見えません。私はそれをどのように渡すかにかかわらず、候補者を単独で作成するのは問題ありません。このように設定DocumentSerializerで
class CandidateSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Candidate
fields = (
'pk',
'first_name',
'owner',
)
class DocumentSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
candidate = CandidateSerializer(required=True)
class Meta:
model = Document
fields = (
'owner',
'candidate',
)
def create(self, validated_data):
candidate_data = validated_data.pop('candidate')
document = Document.objects.create(**validated_data)
Candidate.objects.create(**candidate_data)
ネストされたフィールドで、文書にPOSTをやろうとしている間、私はこのようなエラーが発生します。
IntegrityError: NOT NULL constraint failed: dossier_candidate.owner_id
私が所有者をピックアップしようとするDocumentSerializer.create()
方法を変更すると、owner = serializers.ReadOnlyField(source='owner.username')
が、それはクラスの下にあるべきにもかかわらず、スコープの外に今あるようです。私は
Candidate.objects.create(owner, **candidate_data)
で候補オブジェクトを作成しようとする場合、すなわち
は、
私はこのエラーを取得する:私はこの
Candidate.objects.create(self.owner, **candidate_data)
私を試してみてください
NameError at /rest/documents/
global name 'owner' is not defined
このエラーが発生する:
AttributeError: 'DocumentSerializer' object has no attribute 'owner'
ネストした候補オブジェクトを正常に作成できることを確認する適切な方法は、所有者フィールドを取得することです。