首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Django替换查询集中的某些值?

如何用Django替换查询集中的某些值?
EN

Stack Overflow用户
提问于 2014-08-20 20:11:10
回答 1查看 1.1K关注 0票数 0

我有这两种模式:

代码语言:javascript
复制
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'

从我的观点来看:

代码语言:javascript
复制
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的数据,如下所示:

代码语言:javascript
复制
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表中,我有如下所示:

代码语言:javascript
复制
name=bob, badge_id=8400340910

我想要的是一种呈现如下内容的方法:

代码语言:javascript
复制
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 

对于如何使用查询集来完成这一任务,有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-20 20:51:23

看来Rfid.tag_id实际上是RfidNames.badge_id的外键。您应该这样声明:外键字段可以很容易地成为char字段。

代码语言:javascript
复制
class Rfid(models.Model):
    ...
    tag = models.ForeignKey('RfidNames', db_column='Tag_ID', to_field='badge_id', blank=True, null=True)

现在,您可以简单地遵循模板中的关系:

代码语言:javascript
复制
{% for scan in scan_list %}
    {{ scan.site_id }}  {{ scan.tag.name }}  {{ scan.time }}
{% endfor %}

这会导致每行都进行数据库查找,因此您可以在视图中使用select_related,使其更高效:

代码语言:javascript
复制
scan_list = Rfid.objects.all().using('devices').order_by('-time').select_related('RfidNames')

注意,在任何情况下,您都不需要转换为列表的明确步骤。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25413589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档