Wow, Karen, you're amazing. Thanks for that. I can say I learned a lot about Django today with your help.
thanks!! On Jul 9, 6:38 pm, "Karen Tracey" <[EMAIL PROTECTED]> wrote: > On Wed, Jul 9, 2008 at 12:57 AM, ristretto.rb <[EMAIL PROTECTED]> > wrote: > > > I'm using the svn version. I updated this morning. I can't remember > > if I was getting the error before I updated, or not. > > That ticket I pointed to identifies r7710 as a revision where this problem > did not exist. With your models (much simpler than the ones in that ticket) > I was able to recreate the problem on r7871. Binary search shows that the > problem was introduced in r7790: > > http://code.djangoproject.com/changeset/7790 > > The change message says it was to "Make sure we only create the minimum > number of table indexes for MySQL" but I don't believe this problem has > anything to do with creating table indexes. (I did not recreate the tables > when recreating the problem, just attempted to "save and continue editing" a > problematic entry.) > > I have spent the day tracking this down (it's taken me all day because > > > I don't know Django or Python very well, and I haven't been able to > > find a comprehensive IDE that is worth much more then just an editor. > > Argh.) > > Well you picked some hairy code to start with. FWIW I use Eclipse with > PyDev which is good enough for stepping through code, setting breakpoints, > and examining variables, though it can run into problems with side-effects > of the variable display. For getting some clue about what code path is > running it's usually OK enough. > > In any case, here's what I'm up to > > > > > In django-trunk/django/oldforms/__init__.py line around 68, I have put > > some logging output. field.get_validation_errors(new_data) is coming > > back as a oldforms.HiddenField when it generated the following error. > > > 2008-07-09 04:03:08,227 DEBUG <class 'django.oldforms.HiddenField'> > > 2008-07-09 04:03:08,227 DEBUG {'jointable.0.id': [u'Join table with > > this ID already exists.']} > > > I don't know why the admin system needs to put this following hidden > > in the html > > > <input type="hidden" id="id_jointable.0.id" > > name="jointtable.0.id" value="38" /> > > That's the primary key value of the inline-edited object. When the admin > code needs to update any of the visible fields, it needs to pull the primary > key value out of the hidden field in order to know the correct record to > update. > > > Now, I've traced this down to line 474, roughly of django-trunk/django/ > > oldforms/__init__.py where a the HiddenField class is defined. A > > validator is passed in called "_curried". I have no idea what that > > is. Going to stop here. > > Yeah, the problem is that validator. Prior to r7790, these hidden fields > did not have any validators attached to them. Now they have the > manipulator_validator_unique validator that is run. Problem is this > validator doesn't seem to be appropriate for this case. Tracing through it > it is looking up the inline edited object's primary key value in the parent > object's table and if it exists comparing it to the parent object's original > primary key value, so you get an error if the primary key value for the > inline edited object exists in the parent object's table and differs from > the parent primary key value. I don't believe that validator is supposed to > be associated with the hidden input field for the primary key of an > inline-edited object. > > It's being added here: > > (http://code.djangoproject.com/browser/django/trunk/django/db/models/f... > ) > > if self.unique or (self.primary_key and not rel): > > params['validator_list'].append(curry(manipulator_validator_unique, self, > opts, manipulator)) > > which points to the changes associated with setting unique in r7790 as what > has introduced the problem. I don't understand exactly what that change was > supposed to be doing, so I'm not sure what the right fix is. I'll update > #7682 with what I've figured out and hopefully someone who knows the code > can fix it. In the meantime if you drop back to r7789 I think you will find > the problem goes away. > > Karen > > > > > On Jul 9, 2:47 pm, "Karen Tracey" <[EMAIL PROTECTED]> wrote: > > > On Tue, Jul 8, 2008 at 9:57 PM, ristretto.rb <[EMAIL PROTECTED]> > > wrote: > > > > > More details. I'm using MySQL at the moment (but with a plan to move > > > > to Postgresql.) The association table has a number of rows loaded > > > > through these models, but not through my Django app directly. I used > > > > the Model classes in a script to pre load a bunch of data. Could this > > > > be the problem? > > > > > On Jul 9, 1:28 pm, ristretto.rb <[EMAIL PROTECTED]> wrote: > > > > > OK, I took core=True off, and added it to the reference_no field. > > The > > > > > problem seems to go away for the case when no there are no > > > > > pre-existing joins. Clearly, I don't understand what core is for. > > > > > I'll read the docs again, and see if it makes sense. > > > > > > However, it still errors with > > > > > > {'jointable.0.id': [u'Join Table record with this ID already > > exists.']} > > > > > > when I tried to save a LeftSide records with existing associations. > > > > > > thanks for any and all help. > > > > I have no idea what is going on, but a ticket was recently (4 hours ago) > > > opened reporting the same error message for inline-edited objects: > > > >http://code.djangoproject.com/ticket/7682 > > > > It seems like some code is thinking records are supposed to be new and > > > checking for primary key uniqueness when in fact it is existing records > > that > > > are being updated. This might be a recently introduced bug, it's a > > little > > > curious to have two people reporting the same (not common) error message > > > suddenly so close together. > > > > What version are you running? > > > > Karen > > > > > > On Wed, Jul 9, 2008 at 1:09 PM, ristretto. rb < > > [EMAIL PROTECTED]> > > > > wrote: > > > > > > Hello, I'm stuck. Any help will be much appreciated. > > > > > > > I followed > > >http://www.djangoproject.com/documentation/models/m2m_intermediary/to... > > > > > > a > > > > > > Many-to-many relationship via an intermediary table. > > > > > > > class LeftSide(models.Model): > > > > > > : > > > > > > > class RightSide(models.Model): > > > > > > : > > > > > > > class JoinTable(models.Model): > > > > > > leftSide = models.ForeignKey(LeftSide, > > > > > > edit_inline=models.TABULAR, > > > > > > num_in_admin=3, core=True) > > > > > > rightSide = models.ForeignKey(RightSide, > > > > > > edit_inline=models.TABULAR, > > > > > > num_in_admin=3,core=True) > > > > > > reference_no = models.CharField(max_length=10, null=True, > > > > blank=True) > > > > > > > I can load the LeftSide in the admin, and choose to Change a > > record. I > > > > get > > > > > > 3 RightSide menu groups at the bottom. I can choose a RightSide to > > set > > > > as a > > > > > > join. When I choose Save (any of the 3 save variations on the > > page) > > > > nothing > > > > > > is saved. > > > > > > > There are two cases. > > > > > > > 1) If the are already records in the join table for that LeftSide, > > > > then I > > > > > > get an error when I save. {'jointable.0.id': [u'Join Table record > > > > with this > > > > > > ID already exists.']} I didn't actually make any changes to that > > > > > > association, so I don't know why it would complain. > > > > > > > 2) If there are no join table records associated with the > > LeftSide, > > > > then > > > > > > there is no error, but nothing is saved. > > > > > > > Am I doing something totally wrong here? Or is this a bug in the > > Admin > > > > > > system? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---