如何从另一个模型访问模型属性

时间:2017-04-03 08:35:30

标签: django django-models model

我是Django Framework的新手,我想知道是否可以通过模型Y从模型X访问一个属性...在我的例子中,有一个名为"评估"这个模型接收候选人的评分。他们有一个接收候选人的外国人(什么是另一个模型)和一个获得我想要的分数的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)

3 个答案:

答案 0 :(得分: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

希望这会对你有所帮助

答案 1 :(得分:1)

与其他答案一样,您在Django中使用backwards relation

参见示例:Many-to-one relationships

Examples of model relationship API

答案 2 :(得分:0)

您可以使用

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

由于您使用的是Foriegn Key,因此有多个Evaluation个对象。Candidate_obj.evaluation_set.all()可能会有多个对象。