2017-04-03 124 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)' –

相关问题