Django模型通过字段查找

2024-10-02 14:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模型定义如下:

class Perfcrew(models.Model):
    perfcrewid = models.IntegerField(primary_key=True)
    performanceid = models.ForeignKey('Performance', db_column='performanceid', blank=True, null=True)
    crewid = models.ForeignKey(Crew, db_column='crewid', blank=True, null=True)
    responsiblities = models.CharField(max_length=50, db_column='responsiblities',blank=True)

    def __unicode__(self):
        return 'Crew on Performance. Name: {0}, Responsibility: {1}'.format(self.crewid, self.responsiblities)
        # self.productionid, self.stageid, self.starttime, self.info,self.actors, self.crews)
    class Meta:
        managed = False
        db_table = 'perfcrew'


class Performance(models.Model):
    performanceid = models.IntegerField(primary_key=True)
    info = models.TextField(blank=True)
    stageid = models.ForeignKey('Stage', db_column='stageid', blank=True, null=True)
    starttime = models.TimeField(blank=True, null=True)
    productionid = models.ForeignKey('Production', db_column='productionid', blank=True, null=True)
    actors = models.ManyToManyField(Actor, through='Perfactor', through_fields=( 'performanceid', 'actorid'))
    crews = models.ManyToManyField(Crew, through='Perfcrew', through_fields=('performanceid', 'crewid'))

    def __unicode__(self):
        return 'Production: {0}, Stage: {1}, Start Time: {2}, Info: {3}, Actor: {4}, Crew: {5}'.format(
        self.productionid, self.stageid, self.starttime, self.info,self.actors.filter(pk=3) ,self.crews.all())
        # self.productionid, self.stageid, self.starttime, self.info,self.actors, self.crews)
    class Meta:
       managed = False
       db_table = 'performance'

class Crew(models.Model):
    crewid = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=50, blank=True)
    bio = models.TextField(blank=True)

    def __unicode__(self):
        return "Crew: {0}, Bio:{1}".format(self.name, self.bio)

    class Meta:
        managed = False
        db_table = 'crew'

一场演出有许多工作人员,而且工作人员可以参加许多演出。我想知道每一场演出的剧组名单:

^{pr2}$

但总是一片空白。我做错什么了吗?我应该如何引用与性能相关的crew对象?我已从数据库中的数据中确认,其中有符合此关系的项目,即有船员,以及相关的perfcrew条目。在

我这样问:

> perf = Performance.objects.all()[0]
> perf.crews.all()
> []

PerfCrew已正确填充。在


Tags: selftruedbmodelscolumnnullclassblank