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

Sap*_*ire 4 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'
Run Code Online (Sandbox Code Playgroud)

我去manage.py shell测试我的模型,我尝试以这种方式访问​​一个人的cell_phone:

        p = Person.objects.get(pk=1)
        cell_phone = Person_ext.objects.get(person_no=p).filter(key='cell').value
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

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

我的数据库列只是"person_id",但是django正在寻找"person_no_id".如何使用person_no从person访问personExt数据,我该怎么办?

Aea*_*Aea 5

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

SHOW CREATE TABLE `personExt `;
Run Code Online (Sandbox Code Playgroud)

python manage.py sql APPNAME
Run Code Online (Sandbox Code Playgroud)

对于有问题的表.您可以通过使用南方等迁移工具,重新创建数据库或手动编辑数据库来修复此字段来解决此问题.或者,如果您要导入,则可以更改模型:

person_no = models.ForeignKey(Person, db_column="person_id")
Run Code Online (Sandbox Code Playgroud)

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