On Jul 26, 4:24 pm, Nis Jørgensen <[EMAIL PROTECTED]> wrote:
> AnaReis skrev:
>
> > Hi all!
> > I have a delete that isn't working properly. It deletes more than 1
> > register when it shouldn't because I'm specifying the primary key in
> > the filter.
> > The class file is this:
> > class UserInstrument(models.Model):
> > user_name = models.CharField(primary_key=True, maxlength=60)
> > instrument_name = models.CharField(blank=False, maxlength=60)
> > permission = models.TextField(blank=True)
> > def __str__(self):
> > string="user_name: "+self.user_name+"; instr_name:
> > "+self.instrument_name+"; permission: "+self.permission
> > return string
> > class Meta:
> > db_table = 'User_instrument'
> > unique_together = (("user_name", "instrument_name"),)
> > In the view function I'm doing this:
> > UserInstrument.objects.filter(user_name__exact=username,
> > instrument_name__exact=itemid).delete()
>
> > Oh and another detail, in the MySQL table, the primary key is the
> > user_name and the instrument_name together.
>
> I am not sure whether this is the cause of your problem, but
>
> - Django doesn't support multi-field primary keys
> - Your model class tells Django that "user_name" alone is the primary
> key, which is wrong (and will lead to strange primary key lookups).
> - Django implements its own cascading delete, independent of the
> database. In this I believe it loops throught the queryset, and deletes
> the objects based on the primary key. Since you "lied" to it about what
> the PK is, it deletes the wrong objects.
>
> Quick solution: Remove the primary_key=True from the model - this will
> add the standard "id" autonumber field.
>
> Slow solution: Add support for multi-field primary keys to the database.
>
> Nis
Hi,
It would be much easier to just put an autonumber field, the problem
is that I can't change the database.
In the database, the primary key is a multi field primary key, it's
the user_name and the instrument_name, and unfortunately I can't
change this.
The way I found to fix this was to put primary_key=True in all the
fields that are actually primary keys. Now it works properly.
Thanks for your help!
Ana
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" 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-users?hl=en
-~----------~----~----~----~------~----~------~--~---