django中的基本关系(建立在遗留数据库之上)

时间:2012-06-20 14:08:20

标签: django django-models django-orm

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

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

在models.py(Fylker是县,Dagensrepresentanter是人)

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)。

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

1 个答案:

答案 0 :(得分:0)

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

您有两种选择:

  1. 向表中添加外键约束(如果您使用的是MyISAM,则会涉及升级到Innodb)。然后再次运行./manage inspectdb并显示关系。
  2. 按原样使用表(即,它们之间没有明确的关系),并在对象级别或通过编写自己的SQL查询手动编写查询(例如,Mytable.objects.get(other_table_id = 23))。无论哪种方式,你都失去了python的ORM查询语言的许多好处。