2017-12-28 16 views
1

私は、Disease ModelとEvidence Modelでアトリビュートを表示しようとしていますが、エンドリンクに表示されるアトリビュートは、ルールモデルに存在するアトリビュートだけです。ネストされたリレーションシップシリアライザの残りのフレームワークが正しく表示されない

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

EDIT:前の答えは間違っていました。答えを更新しました。

シリアライザで間違ったフィールド名を使用しています。以下は正しいものです:

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は、1つの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

廃止予定の値がある可能性があるため、Djangoを更新する必要がありますか? –

+0

この問題とdjango 1.10に関する問題は何ですか? – Jason

関連する問題