2017-12-28 32 views
1

질병 모델 및 증거 모델에 특성을 표시하려고하지만 끝 링크에 표시된 특성은 규칙 모델에있는 특성 만 표시합니다.중첩 관계 serializer 나머지 프레임 워크가 제대로 표시되지 않음

Models.py는 : -

class Rule(models.Model): 

    disease = models.ForeignKey(Disease, default=0,related_name="DRules") 

    evidence = models.ForeignKey(Evidence, default=0,related_name="ERules") 

    measure_of_belief = models.PositiveIntegerField(\ 
     help_text="The measure of belief (percentage) that a disease is present given this evidence exists", \ 
     default=0,validators=[MinValueValidator(0), MaxValueValidator(100)]) 

    measure_of_disbelief = models.PositiveIntegerField(\ 
     help_text="The measure of disbelief (percentage) that a disease is present given an evidence does not exists", \ 
     default=0,validators=[MinValueValidator(0), MaxValueValidator(100)]) 

    archived = models.BooleanField(default=False) 

    def __str__(self): 
      return "{}-{}".format(self.disease, self.evidence) 

    class Meta: 
     verbose_name = "Rule" 
     verbose_name_plural = "Rules" 
     unique_together = ('disease', 'evidence',) 


class Disease(models.Model): 
    """ 
     The model where the category will be stored 
    """ 

    name = models.CharField(max_length=255) 
    advise = models.CharField(max_length=500,blank=True) 
    archived = models.BooleanField(default=False) 

    def __str__(self): 
     return self.name 

    class Meta: 
     verbose_name = "Disease" 
     verbose_name_plural = "Diseases" 

class Evidence(models.Model): 


    evidence_choices = { 
     ("Observable Evidence", ("Observable Evidence")), 
     ("Cause", ("Cause")) 
    } 

    name = models.CharField(max_length=255) 
    question = models.CharField(max_length=500) 
    evidence_type = models.CharField(choices = evidence_choices,max_length=20,default="Observable Evidences") 
    archived = models.BooleanField(default=False) 
    image_name = models.ImageField(upload_to='media/', default='media/None/no-img.jpg') 

    def __str__(self): 
     return self.name 

    class Meta: 
     verbose_name = "Evidence" 
     verbose_name_plural = "Evidences" 

Serializers.py

class DiseaseSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Disease 
     fields = '__all__' 

class EvidenceSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Evidence 
     fields = '__all__' 

class RuleSerializer(serializers.ModelSerializer): 

    DRules = DiseaseSerializer(many=True,read_only=True) 
    ERules = EvidenceSerializer(many=True,read_only=True) 

    class Meta: 
     model = Rule 
     fields = ('measure_of_belief','disease','evidence','DRules','ERules') 

views.py:-

class ShowDiseaseProfile(APIView): 

    def get(self,request,profileid): 


     profile = Rule.objects.filter(
      disease_id=profileid) 

     serializer = RuleSerializer(
      profile,many=True) 


     return Response(serializer.data) 

내가 달성하기 위해 노력하고있어 모든 데이터를 표시하는 것입니다 질병, 증거 및 규칙에 존재합니다.

질병 모델 및 증거 모델의 값이 표시되지 않고 오류 또는 충돌이 없습니다.

Here's the result

답변

0

편집 : 이전의 대답은 잘못되었습니다. 답변을 업데이트했습니다.

시리얼 라이저에서 잘못된 필드 이름을 사용하고 있습니다. 다음은 올바른 것입니다 :

class RuleSerializer(serializers.ModelSerializer): 

    disease = DiseaseSerializer(many=True,read_only=True) 
    evidence = EvidenceSerializer(many=True,read_only=True) 

    class Meta: 
     model = Rule 
     fields = ('measure_of_belief','disease','evidence','DRules','ERules') 

related_name param은 역방향 조회에 사용됩니다. 적절한 설명을 위해 문서를 체크 아웃하십시오. 예 :

disease = Disease.objects.get(id=200) 
d_rules = disease.DRules.all() 

SQL 쿼리를 최적화하려면 select_related 쿼리를 사용하십시오. Select select는 하나의 SQL 작업에서 데이터를 가져 오기 위해 조인을 사용합니다. 나는 오류가있어

class ShowDiseaseProfile(APIView): 

    def get(self,request,profileid): 


     profile = (Rule.objects.filter(disease_id=profileid) 
        .select_related('disease', 'evidence')) 

     serializer = RuleSerializer(
      profile,many=True) 


     return Response(serializer.data) 
+0

내가 인터넷을 샅 샅히 뒤져하려고, 그래서 "규칙 객체에 'DRules'를 찾을 수 없습니다가, 'DRules는'prefetch_related()에 잘못된 매개 변수"나는 문제가 나는을 가지고 생각 1.10 버전의 Django –

+0

더 이상 사용되지 않는 값이있을 수 있으므로 장고를 업데이트해야합니까? –

+0

이 문제와 장고 1.10 관련 문제는 무엇입니까? – Jason