This is a huge one:

I want to implement an optional m2m realtionship in django admin
application, so it is possible to create a new Game (model description
below) without choosing any tags associated with it. By default django
form validation returns an error when I try to do such thing. So I
created a new form (GamesAdminModelForm) and specified tag field as
"required=False". It works quite good, to the point when I want to add
some tags "by hand", after user submited the form. For example user
creates new Game, and after successful validation I want to add some
common tags to it.

The problem is, there is, none of the relations to newly created game
gets saved in DB. No matter what I do, I tried to save it in Game
model method save(), tried to do that in save_model() method of
GamesAdmin (of course after calling obj.save(). Code returns no
exception. I even tried to inject some tags to form in save_model
method, and then re-saving the form - didn't work out well.

The misterious thing of all, is that when I use function shown below,
everything works allright, to the point when I delete "assert Null"
command. What's with that?? When code throws exception m2m
relationships show up in database, when code DOESN'T throw exception
DB m2m relationship table remains empty.

def save_model(self, request, obj, form, change):
    obj.save()
    #get some tag
    tag = Tag.objects.get(pk=1)
    #add relationship to new object
    obj.tag.add(tag)
    assert Null

Hope someone gonna find the right answer.


Simplified models:

#in models.py
class Game(models.Model):
    id = models.AutoField(primary_key=True, db_column='grg_id')
    tags = models.ManyToManyField(Tag, related_name='g_tags')

class Tag(models.Model):
    id = models.AutoField(primary_key=True, db_column='grt_id')
    tag = models.CharField(max_length=255, unique=True,
db_column='grt_tag')
    tag_url = models.CharField(max_length=255, blank=False,
db_column='grt_tag_url')
    tag_keyword = models.CharField(max_length=255, blank=False,
db_column='grt_tag_keyword')

#in admin.py
class GamesAdmin(admin.ModelAdmin):
    form = GamesAdminModelForm

admin.site.register(Game, GamesAdmin)
admin.site.register(Tag)

#forms.py
class GamesAdminModelForm(forms.ModelForm):
    cover = forms.ImageField(widget=ImageWithThumbnailWidget,
required=False)
    tag = forms.ModelMultipleChoiceField(queryset=Tags.objects.all
().order_by('tag'), required=False, widget=FilteredSelectMultiple
(verbose_name='Tagi', is_stacked=True))

    class Meta:
        model = Game

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

Reply via email to