如何从一张表映射到django模型?

时间:2014-10-22 06:07:45

标签: python mysql django

我正在处理一些“遗留”代码并处理一个问题。我有一些mysql架构,其中有两个表(这里简化了很多东西):

article
+------+-------------+-------+------+
| id   | author      | title | year |
+------+-------------+-------+------+
|    1 | author_name | title | 1999 |
+------+-------------+-------+------+

article_pages
+------+------------+----------+
| id   | pages_from | pages_to |
+------+------------+----------+
|    1 |         10 |       15 |
+------+------------+----------+

文章和article_pages的django模型看起来非常明显:

class Article(models.Model):
    id = models.IntegerField()
    author = models.CharField(max_length=256)
    name = models.CharField(max_length = 256)
    year = models.IntegerField()

class ArticlePages(models.Model):
    id = models.IntegerField()
    page_from = models.IntegerField()
    page_to = models.IntegerField()

现在我的views我需要按页面排序:

articles = Article.objects.filter(name=current_name_to_filter).order_by('page_from')

我知道OneToOneFiledArticle之间需要ArticlePages关系,但我不太确定如何实现这一点。

我在尝试:pages_from = OneToOneField(ArticlePages.page_from, related_name = 'id')。我非常了解python,但我是Django的新手。这种方法在我看来非常明显,但它不起作用。我知道需要进行一些数据库更改,但调用python manange.py syncdb不起作用。 两个表中的id列是它们之间的标识符。 idarticle中的article_pages对应在一起。

我需要使用:mysqldjangon=1.5.2

2 个答案:

答案 0 :(得分:0)

您需要使用ForeignKey指向模型,因为OneToOneField是带有unique=True约束的ForeignKey。但是你试图指向精确的id(这是整数)。但这不是思考如何在SQL中工作(当然还有mysql)。

需要什么:

  1. 删除明确定义的id字段。您的模型都有primary key整数字段,名称为“id”。如果没有定义其他主键字段,那么将创建automatically by django这样的字段。

  2. 使用OneToOneField时,请指向您正在引用的模型类。

  3. 最终结果:

    class Article(models.Model):
        author = models.CharField(max_length=256)
        name = models.CharField(max_length = 256)
        year = models.IntegerField()
    
    class ArticlePages(models.Model):
        page_from = models.OneToOneField(Article)
        page_to = models.OneToOneField(Article)
    

答案 1 :(得分:0)

根据您显示的数据表,不清楚标识这两个表之间关系的列是什么。如果这是真实情况,我只能猜测id列是一个(表articlearticle_pages共享相同的ID,这意味着具有特定{{1}的文章}对应于article_pages中具有相同id)的行。

这不应该是Django ORM的情况(至少,我不知道这种数据库结构是可行的)。如果您坚持使用该数据库结构,请尝试直接运行SQL查询(https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly):

请检查表格结构,如果还有更多内容,请更新问题。也许有些文章的容器表(如书/出版物)。