вторник, 27 сентября 2011 г.

Django: ошибка "Accessor for field ... clashes with related field"


Если в результате syncdb вашей django-схемы вы видите сообщение :
Accessor for field ... clashes with related field
то скорее всего дело в том, что одна из ваших таблиц двумя своими полями ссылается на другую таблицу схемы.

Пример:


class User(models.Model):
     name = models.TextField()
     birth_date = models.DateTimeField()

class Message(models.Model):
     from = models.ForeignKey(User)
     to = models.ForeignKey(User)
     text = models.TextField()
#то есть таблица Сообщение имеет два внешних ключа на таблицу Пользователь

По идее django могла бы разруливать такую сиутацию, добавляя к имени аксессора какой-нибудь уникальный индекс (например, простой инкремент). Но о такой возможности фреймворка лично я не знаю..

Проблема же решается дополнительным атрибутом для ссылающихся полей:



class User(models.Model):
     name = models.TextField()
     birth_date = models.DateTimeField()

class Message(models.Model):
     from = models.ForeignKey(User,related_name="message_sender")
     to = models.ForeignKey(User,related_name="message_reciever")
     text = models.TextField()

После этого syncdb должно выполниться без проблем (только, конечно, нет других ошибок =)

Комментариев нет:

Отправить комментарий

Если Вы нашли ошибку у автора, у Вас есть вопрос или просто хотите поделиться чем-то полезным, то пишите - не стесняйтесь..