2017-04-03 109 views
0

我用Django框架新手,我希望知道是否可能我通過模型Y訪問模型X中的屬性...在我的情況下,有一個模型稱爲「評估」這個模型得到候選人的評價分數..他們有一個ForeignKey接受候選人(什麼是另一個模型)和PositiveIntegerField與得分我想要的是通過候選人模型訪問此PositiveIntegerField,這是可能的嗎?如何從另一個模型訪問模型屬性

我的models.py:

from django.db import models 
from jsonfield import JSONField 
from site_.settings import MEDIA_ROOT 
from django.core.validators import MaxValueValidator 

class Criterion(models.Model): 
    label = models.CharField(max_length=100) 

    def __str__(self): 
     return self.label 

class Candidate(models.Model): 
    name = models.CharField(max_length=100) 
    e_mail = models.EmailField(max_length=100, default = '') 
    github = models.URLField(default = '') 
    linkedin = models.URLField(max_length=100, default = '') 
    cover_letter = models.TextField(default = '') 
    higher_education = models.BooleanField(default = False) 
    docfile = models.FileField(upload_to='/home/douglas/Documentos/Django/my-second-blog/site_/media', null=True, blank=True) 

    def __str__(self): 
     return self.name 


class Evaluation(models.Model): 
    candidate = models.ForeignKey(Candidate) 
    criterion = models.ForeignKey(Criterion, default='') 
    score = models.PositiveIntegerField(default = 0, validators=[MaxValueValidator(10)]) 
    appraiser = models.ForeignKey('auth.User') 

    def __str__(self): 
     return str(self.candidate) 

#model de teste 
class Teste(models.Model): 
    nome = models.CharField(max_length=10) 

    def __str__(self): 
     return str(self.nome) 

回答

0

由於您使用的是Foriegn Key可以使用

Candidate_obj.evaluation_set.all()[0].score 

,有機會多Evaluation objects.So Candidate_obj.evaluation_set.all()可以得到一個以上的對象。

+0

的 'Candidate_obj' 和 'evaluation_set' 是模型的Querryset? (Model.objects.all())? –

+0

Candidate_obj是「Candidate」模型的一個對象。將獲得像'Candidate.objects.get(id = myid)' – itzMEonTV

1

你有兩個解決方案來訪問評價對象

例1

candidateObj = Candidate.objects.get(id=your_candidate_id) 
evaluationObjs = Evaluation.objects.filter(candidate=candidateObj) 

例2

evaluationObjs = candidateObj.evaluation_set.all() 

如果你直接創建只有一個評價對象,然後使用

score = candidateObj.evaluation_set.get().score 

希望這將幫助你

+0

感謝您的關注,但是當我嘗試鍵入此測試在shell(manage.py shell)中第一次我收到以下錯誤:「ValueError :不能查詢「Candidato4」:必須是「候選人」實例。「 我把一個Candidate obj放在變量'cand'裏面......當我輸入第二個提示時,我收到:「AttributeError:'評估'對象沒有屬性'evaluation_set'」 第三個提示同樣的錯誤... –

+0

我的理解,但我不能做一個屬性,收到querry集合,對嗎?我嘗試'cand = Candidate.objects.get(name = self.candidate)'並接收:AttributeError:'ForeignKey'對象沒有屬性'model' –

+0

你可以嘗試'Candidate.objects.get(name = self.name)' –

相關問題