Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django ManyToMany relation add() error

I've got a model that looks like this,

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

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

The resulting many to many table in mysql is formed as,

+------------------+------------+------+-----+---------+----------------+
| 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    |                | 
+------------------+------------+------+-----+---------+----------------+

Now, if pl is an object of PL and prt that of PRT, then doing

pl.mentionedby.add(prt)

gives me an error

Incorrect integer value: 'PRT object' for column 'prt_id' at row 1"

whereas

pl.mentionedby.add(prt.tid) 

works fine - with one caveat.

I can see all the elements in pl.mentionedby.all(), but I can't go to a mentioned PRT object and see its prt.mentionedby_set.all().

Does anyone know why this happens? Whats the best way to fix it?

Thanks!

like image 573
viksit Avatar asked Feb 27 '26 03:02

viksit


1 Answers

Adding prt directly should work on first try. How are you retrieving pl and prt? Assuming you have some data in your database, try those commands from the Django shell and see if it works. There seems to be some missing information from the question. After running 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)
like image 95
Thierry Lam Avatar answered Feb 28 '26 16:02

Thierry Lam



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!