Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I render a ManyToManyField as checkboxes?

Tags:

python

django

I'm making a game link site, where users can post links to their favorite web game. When people post games they are supposed to check what category the game falls into. I decided to allow many categories for each game since some games can fall into many categories. So the question is, how do I handle this in my view? And how can I show it as Checkboxes, where at least one has to be checked? And how can I show this as checkboxes in the Admin as well?

Here is the code

Models:

class Category(models.Model):          category = models.CharField(max_length=200)          def __unicode__(self):                  return self.category  class Game(models.Model):      name = models.CharField(max_length=200)      url = models.CharField(max_length=200)      poster = models.ForeignKey(User, related_name='game_poster_set')      postdate = models.DateTimeField(default=datetime.now)      cats = models.ManyToManyField(Category)      hits = models.IntegerField(default=0)      post = models.BooleanField(default=False)  

Views:

def submit(request):          form = GameForm(request.POST or None)          if form.is_valid():                  game = form.save(commit=False)                  game.poster = request.user                  game.save()                  next = reverse('gamesite.games.views.favorites')                  return HttpResponseRedirect(next)          return render_to_response(          'games/submit.html',          {'form': form},          context_instance = RequestContext(request),) 

Forms:

class GameForm(forms.ModelForm):          name = forms.CharField(max_length=15, label='Name')          url = forms.URLField(label='URL', initial='http://')          class Meta:                  model = Game                  fields = ('name','url') 

Thanks!

like image 310
Grétar Jónsson Avatar asked Nov 19 '09 01:11

Grétar Jónsson


1 Answers

class GameForm(forms.ModelForm):          name = forms.CharField(max_length=15, label='Name')          url = forms.URLField(label='URL', initial='http://')          cats = forms.ModelMultipleChoiceField(             queryset=Category.objects.all(),             widget=forms.CheckboxSelectMultiple,             required=True)          class Meta:                  model = Game                  fields = ('name','url','cats') 

that should fix your view, but i'm not sure about the admin. still looking... will edit if i find anything.

like image 160
Brandon Henry Avatar answered Sep 20 '22 04:09

Brandon Henry