Thursday, December 13, 2012

[Solved] validation error in Django Admin

Thanks Chris

It turned out I hadn't read the docs properly. Prior to posting the
problem I had tried ...

instance.item_pictogram_set.remove(pic)

... to be told the relatedmanager object didn't have a remove attribute
when (I thought) it should. So I adjusted the database to make both fk
fields nullable and deliberately made them None to get the code working.
But I should have stuck with nullable foreign keys and the above
instance.item_pictogram_set.remove(pic) because that was all that is
required.

I hadn't read beyond the example code in the docs [1] for the remove
method where it says ...

"In order to prevent database inconsistency, this method only exists on
ForeignKey objects where null=True. If the related field can't be set to
None (NULL), then an object can't be removed from a relation without
being added to another. In the above example, removing e from
b.entry_set() is equivalent to doing e.blog = None, and because the blog
ForeignKey doesn't have null=True, this is invalid."


[1]
https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.remove

Mike


On 13/12/2012 11:30pm, Chris Cogdon wrote:
> I'm going to take a guess that when you "drop one" of them, deleting it,
> there's still a query going on that might want to refer to the other
> one, and the to_python fails because that reference doesn't exist anymore.
>
> You might have better luck if you're using a OneToOne or ForeignKey
> (onetomany), which will let django manage that relationship for you.
>
> On Wednesday, December 12, 2012 4:21:59 PM UTC-8, Mike Dewhirst wrote:
>
> I'm getting an unexpected validation error in Admin which baffles me.
> Any hints appreciated ... here is the traceback
>
> http://dpaste.com/844972/
>
> At the bottom of the traceback where the error is raised, the local
> vars
> are ...
>
> self <django.forms.models.ModelChoiceField object at
> 0x02414890>
> value u'33'
> key 'pk'
>
> When I save the item, it auto-generates many-to-many connections to a
> few standard images in the database via a through table. However there
> is a rule which says "if ever these two images are connected to an
> item,
> only keep this one and drop that one."
>
> I use a post-save signal to "drop that one" using ...
>
> Item_Pictogram.objects.filter(item=instance, pictogram=pic,
> via='auto').delete()
>
> The local var value above being u'33' happens to be the exact pk of the
> Item_Pictogram record I want to delete - I checked in Postgres.
>
> The pk should be an integer but I suppose that's nothing.
>
> Thanks for any help
>
> Mike
>
> --
> You received this message because you are subscribed to the Google
> Groups "Django users" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/TjN8sz1YkQwJ.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscribe@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.

--
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 django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate