我正在处理一些“遗留”代码并处理一个问题。我有一些 mysql 模式,其中有两个表(这是简化的,这里有更多的东西):
article
+------+-------------+-------+------+
| id | author | title | year |
+------+-------------+-------+------+
| 1 | author_name | title | 1999 |
+------+-------------+-------+------+
article_pages
+------+------------+----------+
| id | pages_from | pages_to |
+------+------------+----------+
| 1 | 10 | 15 |
+------+------------+----------+
article 和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()
现在在我的 View
中,我需要按页对文章进行排序:
articles = Article.objects.filter(name=current_name_to_filter).order_by('page_from')
我知道 Article
和 ArticlePages
之间需要存在 OneToOneFiled
关系,但我不太确定如何实现它。
我正在尝试:pages_from = OneToOneField(ArticlePages.page_from, related_name = 'id')
。我很了解 python,但我对 Django 很陌生。在我看来,这种方法非常明显,但行不通。我知道需要对数据库进行一些更改,但是调用 python manange.pysyncdb 没有效果。
两个表中的 id 列是它们之间的标识符。 article
中的id
和article_pages
一一对应。
我需要使用:mysql
、djangon=1.5.2
最佳答案
您需要使用ForeignKey
指向模型,如 OneToOneField
是具有unique=True
约束的ForeignKey。但你试图指向确切的 id (这是整数)。但这不是Thinks在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)
关于python - 如何从一张表映射到django模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26501243/