我有这两种模式:
class Rfid(models.Model):
id = models.IntegerField(primary_key=True)
tag_id = models.CharField(db_column='Tag_ID', max_length=16, blank=True) # Field name made$
site_id = models.CharField(db_column='Site_ID', max_length=8, blank=True) # Field name mad$
time = models.IntegerField(db_column='Time', blank=True, null=True) # Field name made lowe$
class Meta:
managed = False
db_table = 'RFID'
class RfidNames(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=24, blank=True)
badge_id = models.CharField(max_length=16, blank=True)
class Meta:
managed = False
db_table = 'RFID_names'从我的观点来看:
def rfid_lister(request):
raw_scans = Rfid.objects.all().using('devices').order_by('-time')
rfid_scan_list = list(raw_scans )
return render_to_response("RFID_display.html",
locals(),
context_instance=RequestContext(request))在我的模板im中只显示来自raw_scan的数据,如下所示:
A11 8400340910 8/20/2014 15:37:22
A11 8400340910 8/20/2014 13:55:10
A11 8400340910 8/20/2014 13:51:53
A11 8400340910 8/20/2014 13:43:33
A11 35021E05AE 8/20/2014 13:39:58
A11 0500679CF9 8/20/2014 13:39:26
A11 0500679CF9 8/20/2014 13:39:24 但是,在RfidNames表中,我有如下所示:
name=bob, badge_id=8400340910我想要的是一种呈现如下内容的方法:
A11 bob 8/20/2014 15:37:22
A11 bob 8/20/2014 13:55:10
A11 bob 8/20/2014 13:51:53
A11 bob 8/20/2014 13:43:33
A11 35021E05AE 8/20/2014 13:39:58
A11 0500679CF9 8/20/2014 13:39:26
A11 0500679CF9 8/20/2014 13:39:24 对于如何使用查询集来完成这一任务,有什么想法吗?
谢谢
发布于 2014-08-20 20:51:23
看来Rfid.tag_id实际上是RfidNames.badge_id的外键。您应该这样声明:外键字段可以很容易地成为char字段。
class Rfid(models.Model):
...
tag = models.ForeignKey('RfidNames', db_column='Tag_ID', to_field='badge_id', blank=True, null=True)现在,您可以简单地遵循模板中的关系:
{% for scan in scan_list %}
{{ scan.site_id }} {{ scan.tag.name }} {{ scan.time }}
{% endfor %}这会导致每行都进行数据库查找,因此您可以在视图中使用select_related,使其更高效:
scan_list = Rfid.objects.all().using('devices').order_by('-time').select_related('RfidNames')注意,在任何情况下,您都不需要转换为列表的明确步骤。
https://stackoverflow.com/questions/25413589
复制相似问题