Django生产服务器上的FieldDoesNotExist错误

时间:2016-07-21 10:06:00

标签: python django postgresql

将我的Django应用程序推送到生产服务器之后,我遇到了这个错误:

FieldDoesNotExist at /

Class_B has no field named <function DO_NOTHING at 0x7f5993ed3440>

错误似乎来自对我的数据库的查询(我用于开发的相同PostgreSQL数据库)。

以下是我的model.py简化版:

class Class_B(models.Model):
    field1 = models.IntegerField(primary_key=True)
    field2 = models.TextField(blank=True, null=True)
    field3 = models.CharField(max_length=25)
    field4 = models.CharField(max_length=100, blank=True, null=True, db_index=True)

    class Meta:
        db_table = 'class_B'
        select_on_save = True

class Class_A(models.Model):
    field1 = models.OneToOneField('An_other_class', db_index=True,
                                  on_delete=models.CASCADE)
    field2 = models.ForeignKey('Class_A', models.DO_NOTHING,
                               db_column='field1', db_index=True,
                               related_name='+', blank=True, null=True)

    class Meta:
        db_table = 'class_A'

出现错误的查询:

print(Class_A.objects.all())

没有任何迁移要做,对数据库的一些查询也有效。

我在CentOS上使用带有wod_wsgi的httpd服务器。我的python版本是3.3和Django 1.8.0。

此错误的任何已知解决方案?

1 个答案:

答案 0 :(得分:2)

这里:

field2 = models.ForeignKey('Class_A', models.DO_NOTHING,
                           db_column='field1', db_index=True,
                           related_name='+', blank=True, null=True)

您将models.DO_NOTHING作为位置参数而不是命名参数传递。这在Django&gt; = 1.9中是合法的(在Django&gt; = 1.10中是必需的),但对于以前的Django版本,ForeignKey的第二个位置参数是to_field选项,因此您的错误消息

长话短说,你想要

 models.ForeignKey('Class_A', on_delete=models.DO_NOTHING, ...)