내 데이터베이스에 '피드백'개체의 인스턴스를 저장하고 싶습니다. 피드백 개체에는 '클라이언트'에 대한 외래 키가 있고 관련이있을 수 있으므로 genericforeignkey가 있습니다. 'Vendor'또는 'Store'에 게시하려면 POST를 허용하는 2 개의 URL을 만들고 하나는 공급 업체에 대한 의견을 만들고 다른 하나는 상점에 대한 의견을 작성하고 둘 모두 기본 키를받습니다.DJANGO - 나머지 프레임 워크를 사용하여 POST 메서드에서 genericforeignkey로 데이터 저장
클래스 다이어그램 예 :
이 내 방법입니다 :
@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
이를 피드백 개체의 NULL이 아닌 genericforeignkey가 있기 때문에 발생합니다.
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 메서드에서 어떻게 피드백 개체를 만들 수 있습니까?
이 serializer.object하는 feedback/store/(?P<store_id>\d+)/
{
"comment": "Nice store",
"client": 1
}
은 믿을 수 없다, 내 문제를 해결! –
이것은 DRF 3.0 이전의 DRF 버전입니다. 이것이 3.0+에서 어떻게 처리되어야하는지에 관해서는 여기를보십시오 : http://stackoverflow.com/a/13564519/2133271 – IAmKale