0

There's form with many fields (Date, Char, Text, Image, URL...) and they works fine. I mean values are submitted to DB as they must. But when I added ManyToManyField, it didn't save the value of this MultipleChoice form to DB. Any ideas why?

models.py:

class EventTag(models.Model):
    tags = models.CharField(max_length=300)

    def __str__(self):
        return self.tags

class Article(models.Model):
    source = models.CharField(max_length=100)
    source_img = models.ImageField(default='default.png', blank=True)
    #other fields
    event_tags = models.ManyToManyField(EventTag, blank=True)

forms.py:

class CreateArticle(forms.ModelForm):
    class Meta:
        model = models.Article
        fields = ['source', 'source_img', 'event_tags', ]

views.py:

def article_create(request):
    if request.method == 'POST':
        form = forms.CreateArticle(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.author = request.user
            instance.save()
            return redirect('articles:list')
    else:
        form = forms.CreateArticle()
    return render(request, 'articles/article_create.html', { 'form': form })
Medevin
  • 405
  • 1
  • 5
  • 9

1 Answers1

0

after save your form you must call form.save_m2m(). your view must be like this:

def article_create(request):
    if request.method == 'POST':
        form = forms.CreateArticle(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.author = request.user
            instance.save()
            form.save_m2m()
            return redirect('articles:list')
    else:
        form = forms.CreateArticle()
    return render(request, 'articles/article_create.html', { 'form': form })
vorujack
  • 1,778
  • 16
  • 22