Джанго не может разрешить имя атрибута - PullRequest
1 голос
/ 10 мая 2011

Кто-нибудь может увидеть источник этой ошибки?

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"):

И определение Материи, которое содержит file_num, а также статистику аудита и счет-фактуру в качестве связанных атрибутов:

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.

UPDATE:

Просто для хихиканья я попытался начать с совершенно новой базы данных, прокомментировал South и просто выполнил «syncdb», чтобы посмотреть, какие определения таблиц создаст Django. Он создал таблицы Client и Matter, но НЕ создал поле client_code (или client_id) для хранения информации о внешнем ключе.

Кто-нибудь видел подобную ситуацию, когда Джанго просто не создает поле?

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Gaaah! Проблема заключалась в том, что у меня было свойство (с геттером), определенное ниже в классе с именем «клиент». Это было пережитком более ранней итерации.

0 голосов
/ 12 мая 2011

Я сделаю дикое предположение и скажу, что код, который у вас есть сейчас, и поля в базе данных просто не совпадают.Если вы не используете south во время разработки, единственный способ внести изменения в базу данных - это либо вручную, либо просто удалить таблицы изменений и повторно запустить syncdb.В начале этапа проектирования вы можете это сделать, но действительно рекомендуется использовать юг, особенно если у вас есть данные, которые вы просто не можете удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...