我正在处理一些“遗留”代码并处理一个问题。我有一些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')
我知道OneToOneFiled
和Article
之间需要ArticlePages
关系,但我不太确定如何实现这一点。
我在尝试:pages_from = OneToOneField(ArticlePages.page_from, related_name = 'id')
。我非常了解python,但我是Django的新手。这种方法在我看来非常明显,但它不起作用。我知道需要进行一些数据库更改,但调用python manange.py syncdb
不起作用。
两个表中的id
列是它们之间的标识符。 id
和article
中的article_pages
对应在一起。
我需要使用:mysql
,djangon=1.5.2
答案 0 :(得分:0)
您需要使用ForeignKey
指向模型,因为OneToOneField
是带有unique=True
约束的ForeignKey。但是你试图指向精确的id(这是整数)。但这不是思考如何在SQL中工作(当然还有mysql)。
需要什么:
删除明确定义的id
字段。您的模型都有primary key整数字段,名称为“id”。如果没有定义其他主键字段,那么将创建automatically by django这样的字段。
使用OneToOneField
时,请指向您正在引用的模型类。
最终结果:
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
列是一个(表article
和article_pages
共享相同的ID,这意味着具有特定{{1}的文章}对应于article_pages中具有相同id
)的行。
这不应该是Django ORM的情况(至少,我不知道这种数据库结构是可行的)。如果您坚持使用该数据库结构,请尝试直接运行SQL查询(https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly):
请检查表格结构,如果还有更多内容,请更新问题。也许有些文章的容器表(如书/出版物)。