2017-01-15 4 views
0

피드 유형 페이지에서 3 가지 모델을 수집하려고합니다. 그들은 모두 다양한 유형의 사물을 포함하지만 간결성을 위해이 모델은 모델에서 동일합니다. 장고 REST 프레임 워크를 사용 PUB_DATE으로 정렬 한리스트로 세 개체의 목록을 직렬화하는 일반적인 생각 일 것입니다 무엇다른 모델의 Django REST Framework serializer

class ObjectA(models.Model): 
    text = models.TextField() 
    pub_date = models.DateTimeField('date published',auto_now_add=True) 
    ... 

class ObjectB(models.Model): 
    text = models.TextField() 
    pub_date = models.DateTimeField('date published',auto_now_add=True) 
    ... 

class ObjectC(models.Model): 
    text = models.TextField() 
    pub_date = models.DateTimeField('date published',auto_now_add=True) 
    ... 

. 난 그냥 아래의 메타 버전을 사용하여 경험을 가지고 있지만 그것은 가정하고있는 하나의 모델을 다룰 수 있습니다. 미리 감사드립니다.

class ObjectAListSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ObjectA 
     fields = [ 
      'text', 
      'pub_date' 
     ] 

거의 같이 일하는 것이 뭔가 만들려고 :

class AllObjectsListSerializer(serializers.ModelSerializer): 
+0

무엇을 했습니까? – e4c5

+0

지금까지 노조의 버전을 시험해 보았지만 내 모델을 재구성하여 실험 해 보려고합니다. –

+0

마지막 옵션이 최선의 선택입니다 – e4c5

답변

0

당신은 검색어 세트에 노조를 만들 필요가 :

query_union = query1 | query 2 

을 그리고 당신은에 대한 사용자 정의 시리얼이 필요합니다 그 노동 조합의 분야. 또는 노동 조합 필드가 모델 중 하나에서 모두 동일하다면 해당 모델의 모델 생성자를 사용할 수도 있지만이를 테스트하지는 않았습니다.

2

여기에서 가장 중요한 것은 여기에 세 가지 모델이 없어야한다는 것입니다. 동일한 데이터를 저장하는 경우 하나의 모델 만 있어야합니다. 3 가지 모델을 사용하려면 진술을 실행할 때마다 DRY와 거리가 먼 IF ELIF ELSE을 먼저 사용해야합니다. 실제로 Wtower가 제안한대로 UNION을 수행해야한다는 사실은 말할 것도 없습니다. answer

모델을 병합하십시오.

당신이 목록을 반환하려면

항목

+0

죄송합니다. 모델이 다르기 때문에 분명히해야합니다.이 예제의 경우 복사하고 붙여 넣기 만했습니다. –

+1

모델이 유사해도 테이블/모델에 여전히 문제가 있음을 의미합니다. 디자인. – e4c5

0
dataA = ASerializer(queryset_A, many=True).data 
dataB = BSerializer(queryset_B, many=True).data 
dataC = CSerializer(queryset_C, many=True).data 

단지

반환 응답 (= {의 dataa, 'dataB': dataB, 'dataC'dataC '의 dataa'} 데이터) 당신이 a, b, c 사이의 관계를 선언해야하고 a와 함께 b와 c를 필터링 할 수 있습니다. 당신을위한 예.

관련 문제