データベースに「フィードバック」オブジェクトのインスタンスを保存したいと思います。フィードバック オブジェクトには「クライアント」への外部キーと、「ベンダー」または「ストア」に関連する可能性があるためジェネリック外部キーがあります。許可する 2 つの URL を作成しました。 1 つはベンダーへのフィードバックを作成するため、もう 1 つはストアへのフィードバックを作成するための POST で、どちらも主キーを受け取ります。
クラス図の例:
これが私のアプローチです:
@api_view(['POST'])
def store_feedback_view(request, store_id):
serializer = FeedbackSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
シリアライザーは有効ですが、保存しようとすると次のエラーが発生します。
NOT NULL constraint failed: feedback_feedback.object_id
NOT NULL constraint failed: feedback_feedback.content_type_id
これは、フィードバック オブジェクトの genericforeignkey が NULL ではないために発生します。
class Feedback(models.Model):
comment = models.TextField(verbose_name='Comment', max_length=300, blank=True, null=True)
client = models.ForeignKey(Client, verbose_name="Client feedback", related_name="feedbacks")
limit = models.Q(app_label='core', model='store') | models.Q(app_label='core', model='vendor')
content_type = models.ForeignKey(ContentType,
limit_choices_to=limit)
object_id = models.PositiveIntegerField(verbose_name="Related object ID")
content_object = GenericForeignKey('content_type', 'object_id')
class Meta:
app_label = 'feedback'
POST メソッドでフィードバックのオブジェクトを作成するにはどうすればよいですか?
でのご依頼の一例ですfeedback/store/(?P<store_id>\d+)/
{
"comment": "Nice store",
"client": 1
}