【问题标题】:How to access Foreign key models with custom primary key in django如何在 django 中使用自定义主键访问外键模型
【发布时间】:2012-12-16 02:25:55
【问题描述】:

这是我的两个模型:

在models.py中

class Person(models.Model):

    person_no = models.IntegerField(max_length=10, primary_key='True')
    phone = models.IntegerField(max_length=20)

    class Meta:
        db_table = 'person'

class person_ext(models.Model):

    person_no = models.ForeignKey(Person)
    key = models.CharField(max_length=64)
    value = models.TextField()

    class Meta:
        db_table = 'personExt'

我去 manage.py shell 测试我的模型,并尝试通过这种方式访问​​一个给定此人 id 的人的手机:

        p = Person.objects.get(pk=1)
        cell_phone = Person_ext.objects.get(person_no=p).filter(key='cell').value

但是,我收到以下错误:

DatabaseError: (1054, "Unknown column 'personExt.person_no_id' in 'field list'")

我的数据库列只是“person_id”,但 django 正在寻找“person_no_id”。我需要做什么才能使用来自 person 的 person_no 访问 personExt 数据。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    person_no_id 是我希望 Django 看到的。看来您的数据库实际上与您的模型所期望的不同步。我会考虑比较(sql)的输出

    SHOW CREATE TABLE `personExt `;
    

    python manage.py sql APPNAME
    

    对于有问题的表。您可以通过使用诸如南之类的迁移工具、重新创建数据库或手动编辑数据库来修复该字段来解决此问题。或者,如果您正在导入,您可以更改模型:

    person_no = models.ForeignKey(Person, db_column="person_id")
    

    编辑:primary_key 应该是 True,而不是字符串“True”,Meta 类的缩进看起来不对,您应该考虑将 person_ext 命名为 PersonExt。

    【讨论】:

    • 我正在使用两个数据库。我无法将此模型同步到数据库,因为我无法写入它。我的数据库表personExt 有列person_noperson 的外键,id 是主键。
    • 根据你所说的,你应该尝试我的最后一个建议,将 django 模型更改为 db_column="person_no"
    • 修复了缩进,更改了primary_key=True 并尝试了p = Person.objects.get(pk=1) cell_phone = Person_ext.objects.get(person_no=p).filter(key='cell').value,但仍然没有运气。我收到DoesNotExist: person_ext matching query does not exist.
    猜你喜欢
    • 2018-06-05
    • 2013-05-04
    • 2016-04-02
    • 1970-01-01
    • 2011-04-08
    • 2012-02-15
    • 2021-10-17
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多