如何在django中使用自定义主键访问外键模型

时间:2012-12-16 02:25:56

标签: django django-models

这是我的两个模型:

在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来测试我的模型,我尝试以这种方式访问​​一个人的cell_phone:

        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_no从person访问personExt数据。

1 个答案:

答案 0 :(得分:5)

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。

相关问题