django - 遗留数据库和内部联接

时间:2014-08-13 01:56:30

标签: django django-models

我有以下型号 -

class Schmst(models.Model):
    schmst_proddt = models.DateTimeField(primary_key=True)

    class Meta:
        managed = False
        db_table = 'schmst'

class Owner(models.Model):
    owner_id = models.IntegerField(primary_key=True)
    owner_name = models.CharField(max_length=30, blank=True)

    class Meta:
        managed = False
        db_table = 'owner'

class Jobmst(models.Model):
    jobmst_id = models.IntegerField(primary_key=True, db_column='jobmst_id', to_column='jobmst_id')
    jobmst_type = models.SmallIntegerField()
    jobmst_name = models.TextField(blank=True)

    class Meta:
        managed = False
        db_table = 'jobmst'

class Jobrun(models.Model):
    jobrun_id = models.IntegerField(primary_key=True)
    jobmst_id = models.ForeignKey(Jobmst, db_column='jobmst_id', to_field='jobmst_id')
    jobmst_type = models.SmallIntegerField(blank=True, null=True)
    jobrun_proddt = models.ForeignKey(Schmst, db_column='jobrun_proddt', to_field='schmst_proddt')
    jobrun_owner = models.ForeignKey(Owner, db_column='jobrun_owner', to_field='owner_id')

    class Meta:
        managed = False
        db_table = 'jobrun'

从那里我有一个看似似乎没有做任何加入的观点。

def hungjobs(request):
    template_vars['jobrun'] = Jobrun.objects.db_manager('Admiral').prefetch_related('jobmst_id__owner_id').filter(jobrun_status=51, jobrun_duration__gt=1800, jobmst_type__in=[2, 6])

    t = get_template('queries\HungJobs.html')
    c = Context(template_vars)

    return HttpResponse(t.render(c), mimetype="text/html")

我想在下面的模板中解析结果 -

<table border="1">

<tr>
<td>Owner</td>
<td>Production Date</td>
<td>Job ID</td>
<td>Duration</td>
<td>Job Name</td>
</tr>
    {% for jobrun in jobrun %}
<tr>
<td>{{ jobrun.owner_name }}</td>
<td>{{ jobrun.jobrun_proddt|date:"M d, Y" }}</td>
<td>{{ jobrun.jobrun_id }}</td>
<td>{{ jobrun.jobrun_duration }}</td>
<td>{{ jobrun.jobmst_name }}</td>
</tr>
    {% endfor %}
</table>

目前只有jobrun_id和jobrun_duration正在加载到模板中,因为这些值在模型I中直接查询。然而,外键关系似乎不起作用,我不确定为什么从我检查过的所有事情中他们的设计都是正确的。

1 个答案:

答案 0 :(得分:1)

我还没有运行你的代码,但我发现了一些错误:

  1. 对于循环变量名称应该更改[或者您可以将模板变量名称]从jobrun更改为jobruns。以这种方式重用变量名称不是一个好习惯。
  2. 您需要指定需要在模板中打印外键的字段。类似的东西:
  3. {{jobrun.jobrun_proddt。 schmst_proddt |日期:&#34; M d,Y&#34; }}

    表示日期。就目前而言,您将返回对象而不是外键对象的特定字段。