私はdjango restフレームワークにはunique_together制約でも使われている一般的な関係について少し問題があります。django restフレームワーク:contenttype unique_togetherとシリアライゼーション
私は、このモデルを持っている:
class VPC(models.Model):
name = models.SlugField(null=False, max_length=100)
deletable = models.BooleanField(null=False, default=True)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class Meta:
unique_together = (('name', 'content_type', 'object_id'))
それは一般的な関係とユニークな制約があります:VPCの名前+(所有者である)の一般的な関係を。ここで
は、シリアライザです:
分野でclass VPCSerializer(serializers.ModelSerializer):
class Meta:
model = VPC
read_only_fields = ('deletable', 'date_created', 'date_modified')
fields = ('name', 'deletable')
lookup_field = 'name'
validators = [
UniqueTogetherValidator(
queryset=VPC.objects.all(),
fields=('name', 'content_type', 'object_id')
)
]
私はCONTENT_TYPEを入れて、私は彼らがユーザーによって設定/表示させたくないようOBJECT_IDはありません。
しかし、同じアカウント/名前のVPCを作成するときにdjango.db.utils.integrityerrorエラーが発生するのを避けるために、それらをUniqueTogetherValidatorに配置する必要があります。
しかし、私はVPCを作成しようとすると、今、私はこのエラーを得た:
{ "OBJECT_ID":[ "このフィールドは必須です"]、 "CONTENT_TYPE":[ "このフィールドは必須です。 「]}
は、だから私のviewsets.ModelViewSetに私は(perform_createを上書きしようとした) のobject_idとCONTENT_TYPE BUを設定するにはこのメソッドを呼び出す前にエラーが発生しているように見えます。
get_serializer_context() object_idとcontent_typeを含む辞書を返すようにしようとしますが、どちらも機能しません。
私はこれに多くの時間を費やしており、私は見つけられません。 したがって、シリアライザでobject_idとcontent_typeを設定するには、どのメソッドをオーバーライドする必要がありますか?
ありがとうございました。
ありがとうございます。 (NB:content_typeとobject_idをシリアライザのfields属性に追加する) – JonDeau