django无法解析属性名称

时间:2011-05-10 17:54:55

标签: django

任何人都可以看到此错误的来源吗?

django.core.exceptions.FieldError: Cannot resolve keyword 'client' into field. Choices are: auditstatushistory, file_num, invoice

导致问题的陈述是:

for invoice in Invoice.objects.filter(matter__client__servicer_code = "XXX"):

Matter的定义包含file_num,auditstatushistory和invoice作为相关属性,是:

class Matter(models.Model):
    file_num = models.CharField(max_length=20, primary_key=True)
    client = models.ForeignKey("Client", db_column="client_code", 
                               related_name="client")

这里唯一的“奇怪”事情是,当我最初设置数据库时,客户端不存在作为外键,因此我通过

将client_code添加到基础事项表中
alter table foo_matter add client_code varchar(10) null;

在连接客户端和物质的数据库中没有外键。我唯一能想到的是我没有在我的foo_matter表中正确命名列。但是我无法运行syncdb来尝试它,因为已经安装了South。

更新:

只是为了咯咯笑,我尝试从一个全新的数据库开始,注释掉South,然后只是做了一个“syncdb”来看看Django会创建什么表定义。它创建了Client和Matter表,但没有创建client_code(或client_id)字段来存储外键信息。

有没有人见过这样的情况,Django只是没有创建一个字段?

2 个答案:

答案 0 :(得分:0)

我会猜测一下,并说你现在的代码和数据库中的字段根本不匹配。如果您在开发期间未使用south,则只需手动更改数据库,或者只删除更改表并重新运行syncdb。在设计阶段开始时你可以做到这一点,但它确实建议使用南方,特别是一旦你有了你不能放弃的数据。

答案 1 :(得分:0)

Gaaah!问题是我在名为“client”的类中进一步定义了一个属性(带有getter)。这是早期迭代的遗留物。