1

我一直在谷歌上搜索,但我似乎没有得到它。

如何在 django 中重新创建简单的连接查询?

在 models.py 中(Fylker 是县,Dagensrepresentant 是人)

class Fylker(models.Model):
    id = models.CharField(max_length=6, primary_key=True)
    navn = models.CharField(max_length=300)
    def __unicode__(self):
        return self.navn
    class Meta:
        db_table = u'fylker'

class Dagensrepresentanter(models.Model):
    id = models.CharField(max_length=33, primary_key=True)
    etternavn = models.CharField(max_length=300, blank=True)
    fornavn = models.CharField(max_length=300, blank=True)
    fylke = models.ForeignKey(Fylker, db_column='id')
    def __unicode__(self):
        return u'%s %s' % (self.fornavn, self.etternavn)
    class Meta:
        ordering = ['etternavn']  # sette default ordering
        db_table = u'dagensrepresentanter'

由于模型是由 django 自动创建的,因此我添加了 ForeignKey 并尝试将其连接到县。id 字段是从我试图集成到这个 django 项目中的 db 继承的。

通过查询

Dagensrepresentanter.objects.all()

我得到所有的人,但没有他们的县。通过查询

Dagensrepresentanter.objects.all().select_related()

我加入了 Dagensrepresentanter.id 和 Fylker.id,但我希望他们加入到 fylke,又名

SELECT * FROM dagensrepresentanter d , fylker f WHERE d.fylke = f.id

这样我就可以在与所有人相同的结果集中获得县名(Fylke navn)。

附加请求:我已经阅读了 django 文档和 stackoverflow 上的很多问题,但我似乎无法理解这个 ORM 问题。这是伤害的查询。对于习惯于将数据库视为 SQL 事物、需要开始以 django ORM 术语思考的人,您是否有任何好的资源(具有经验/解释的博文等)?

4

1 回答 1

0

您的旧数据库可能没有外键约束(例如,如果它使用 MyISAM,则甚至不支持外键)。

你有两个选择:

  1. 将外键约束添加到您的表中(如果您在 MyISAM 上,将涉及升级到 Innodb)。然后再次运行 ./manage inspectdb 并且应该出现关系。
  2. 按原样使用表(即,它们之间没有明确的关系)并在对象级别或通过编写您自己的 SQL 查询手动组合查询(例如,Mytable.objects.get(other_table_id=23))。无论哪种方式,您都会失去 python 的 ORM 查询语言的大部分好处。
于 2015-09-02T21:21:18.410 回答