将我的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。
此错误的任何已知解决方案?
答案 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, ...)