#13940: The ManyToManyField raises IntegrityError when used with postgresql
---------------------------+------------------------------------------------
Reporter: DataGreed | Owner: nobody
Status: new | Milestone:
Component: Uncategorized | Version: 1.2
Keywords: postgresql, | Stage: Unreviewed
Has_patch: 0 |
---------------------------+------------------------------------------------
Update Django 1.2 has broken my site.
Here's the affected model:
{{{
#!python
class Category(models.Model):
parent = models.ManyToManyField("self", symmetrical = False, null =
True, blank = True)
name = models.CharField(u"Name",max_length = 500)
alias = models.SlugField(u"Alias for URLs")
creation_vars = models.ManyToManyField(CatalogueVariables,
symmetrical = True, blank = True, null=True,related_name =
"creation_vars", verbose_name=u"New card vars")
filter_vars = models.ManyToManyField(CatalogueVariables, symmetrical =
True, blank = True, null=True,verbose_name=u"Filter vars")
exp_filter_vars = models.ManyToManyField(CatalogueVariables,
symmetrical = True, blank = True, null=True,related_name =
"exp_filter_vars", verbose_name=u"Extended filter vars")
order = models.IntegerField(u"Ordering", null = True, blank = True)
class Meta():
verbose_name = u"Category"
verbose_name_plural = u"Categories"
}}}
Here's the related model:
{{{
#!python
class CatalogueVariables(models.Model):
title = models.CharField(u"Name", max_length = 100)
alias = models.SlugField(u"Alias max_length = 70)
status = models.PositiveIntegerField(u"Status", choices =
VariableStatusConstants.CHOICES, default =
VariableStatusConstants.ENABLED)
}}}
Here is the problem:
{{{
#!python
>>> from catalogue.models import Category as c
>>> a = c.objects.get(pk=362)
>>> from catalogue.models import CatalogueVariables as v
>>> s = v.objects.get(pk=452)
>>> a.creation_vars.add(s)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-
packages/django/db/models/fields/related.py", line 494, in add
self._add_items(self.target_field_name, self.source_field_name, *objs)
File "/usr/local/lib/python2.6/dist-
packages/django/db/models/fields/related.py", line 574, in _add_items
'%s_id' % target_field_name: obj_id,
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py",
line 352, in create
obj.save(force_insert=True, using=self.db)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/base.py",
line 435, in save
self.save_base(using=using, force_insert=force_insert,
force_update=force_update)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/base.py",
line 535, in save_base
transaction.commit_unless_managed(using=using)
File "/usr/local/lib/python2.6/dist-packages/django/db/transaction.py",
line 175, in commit_unless_managed
connection._commit()
File "/usr/local/lib/python2.6/dist-
packages/django/db/backends/__init__.py", line 32, in _commit
return self.connection.commit()
IntegrityError: insert or update on table
"catalogue_category_creation_vars" violates foreign key constraint
"catalogue_category_creation_vars_category_id_fkey"
DETAIL: Key (category_id)=(452) is not found in table
"catalogue_category".
}}}
On django 1.0 everything worked well (and on 1.1, as i can remember)
The problem also exists in the admin site. But if I add !ManyToMany
records manually, via pgadmin3 for postgresql - everything works well, no
errors are returned and everything is ok.
--
Ticket URL: <http://code.djangoproject.com/ticket/13940>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.