Ошибка добавления отношения Django ManyToMany () - PullRequest
3 голосов
/ 04 августа 2009

У меня есть модель, которая выглядит следующим образом,

class PL(models.Model):
    locid = models.AutoField(primary_key=True)
    mentionedby = models.ManyToManyField(PRT)

class PRT(models.Model):
    tid = ..

Результирующая таблица многие ко многим в mysql формируется как

+------------------+------------+------+-----+---------+----------------+
| Field            | Type       | Null | Key | Default | Extra          |
+------------------+------------+------+-----+---------+----------------+
| id               | int(11)    | NO   | PRI | NULL    | auto_increment | 
| PL_id            | int(11)    | NO   | MUL | NULL    |                | 
| PRT_id           | bigint(64) | NO   | MUL | NULL    |                | 
+------------------+------------+------+-----+---------+----------------+

Теперь, если pl является объектом PL и prt объектом PRT, тогда делаем

pl.mentionedby.add(prt)

выдает ошибку

Неверное целочисленное значение: «объект PRT» для столбца 'prt_id' в строке 1 "

, тогда как

pl.mentionedby.add(prt.tid) 

отлично работает - с одной оговоркой.

Я вижу все элементы в pl.mentionedby.all(), но не могу перейти к упомянутому объекту PRT и увидеть его prt.mentionedby_set.all().

Кто-нибудь знает, почему это происходит? Какой лучший способ это исправить?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 04 декабря 2009

Добавление prt напрямую должно работать с первой попытки. Как вы получаете pl и prt? Предполагая, что у вас есть некоторые данные в вашей базе данных, попробуйте эти команды из оболочки Django и посмотрите, работает ли она. Кажется, что в этом вопросе отсутствует информация. После запуска python manage.py shell:

from yourapp.models import PL
pl = PL.objects.get(id=1)
prt = PRT.objects.get(id=1)
pl.mentionedby.add(prt)
0 голосов
/ 04 августа 2009

Это полные модели? Я могу только предположить, что где-то что-то было переопределено, что, вероятно, не должно было быть.

Можете ли вы опубликовать полный код?

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