2016-06-02 4 views
1

프로젝트 또는 작업으로 이동할 수있는 모델 메모가 있습니다.Django Rest Framework 일반 관계 및 뷰셋

class Comment(BaseCommentModel): 
    author = models.ForeignKey(settings.AUTH_USER_MODEL) 
    content_type = models.ForeignKey(
      ContentType, 
      verbose_name=_('content type'), 
      related_name="contenttype_set_for_%(class)s" 
    ) 
    object_pk = models.TextField(_('object ID')) 
    content_object = GenericForeignKey(ct_field="content_type", fk_field="object_pk") 

프로젝트 및 작업과 같이 설정 한 필드가 :

comments = GenericRelation(Comment) 
각각에 대한 뷰셋이 있어야하므로

댓글 중 하나를 프로젝트 또는 작업에 만들 수 있습니다

class ProjectCommentViewSet(viewsets.ViewSet): 

class TaskCommentViewSet(viewsets.ViewSet): 

그리고 각 모델과 관련된 주석을 표시합니다.

하지만 제가 이해하지 못하는 것은 :

  1. 가 어떻게 설정 않는/업데이트를 생성/코멘트가 올바른 관계를 생성되도록 코멘트 모델의 뷰셋에서 삭제 하시겠습니까?

  2. 해당 모델과 관련된 주석을 표시하려면 어떻게 내뷰 세트를 필터링해야합니까? Comment에는 Project 또는 Task 필드가 없기 때문에 select_related를 사용할 수 없습니다.

  3. 이러한 관계에 대해 HyperlinkedModelSerializer을 쓰려면 어떻게해야합니까? CommentSerializer()에 HyperlinkedIdentityField을 추가해야하고 HyperlinkedRelatedField을 User, Project 및 Task Serializers에 추가해야합니까? 또는 어떻게 설정해야합니까?

제공되는 도움을 주셔서 감사합니다.

모델의 관계가 serializer 및 viewsets로 변환되는 방식을 이해하는 데 문제가 있습니다. 또한 일반 관계를 사용할 때 관계를 처리하는 방법에 대해서도 설명합니다.

답변

1

열쇠는 PrimaryKeyRelatedField을 사용하는 것입니다. 그러면 모델 인스턴스의 생성/업데이트에 관련된 Comment 레코드가있는 ID 목록이 반환됩니다.

이외의 경우 GenericRelationdjango-rest-framework 내의 다른 ORM 관계와 같습니다. ViewSetSerializer에서

지금처럼 정의 :

from rest_framework import viewsets, serializers 

class ProjectCommentViewSet(viewsets.ViewSet): 
    queryset = Project.objects.all() 
    serializer_class = ProjectSerializer 

class ProjectSerializer(serializers.ModelSerializer): 
    comments = serializers.PrimaryKeyRelatedField(
     queryset=Comment.objects.all(), many=True, required=False) 

    class Meta: 
     model = Project 
     fields = ('id', 'etc...', 'comments',) 
+0

내가 코멘트 시리얼의 콘텐츠 _의 OBJECT_ID와 content_object에 대한 필드를 정의 할 필요가시겠습니까? – shenk

+0

아니요, 그것들은'model' 정의에서만 필요합니다. –

관련 문제