Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 621807
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T18:54:58+00:00 2026-05-13T18:54:58+00:00

Consider the following models and form: class Pizza(models.Model): name = models.CharField(max_length=50) class Topping(models.Model): name

  • 0

Consider the following models and form:

class Pizza(models.Model):
    name = models.CharField(max_length=50)

class Topping(models.Model):
    name = models.CharField(max_length=50)
    ison = models.ManyToManyField(Pizza, blank=True)

class ToppingForm(forms.ModelForm):
    class Meta:
        model = Topping

When you view the ToppingForm it lets you choose what pizzas the toppings go on and everything is just dandy.

My questions is: How do I define a ModelForm for Pizza that lets me take advantage of the Many-to-Many relationship between Pizza and Topping and lets me choose what Toppings go on the Pizza?

  • 1 1 Answer
  • 3 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T18:54:58+00:00Added an answer on May 13, 2026 at 6:54 pm

    I guess you would have here to add a new ModelMultipleChoiceField to your PizzaForm, and manually link that form field with the model field, as Django won’t do that automatically for you.

    The following snippet might be helpful :

    class PizzaForm(forms.ModelForm):
        class Meta:
            model = Pizza
    
        # Representing the many to many related field in Pizza
        toppings = forms.ModelMultipleChoiceField(queryset=Topping.objects.all())
    
        # Overriding __init__ here allows us to provide initial
        # data for 'toppings' field
        def __init__(self, *args, **kwargs):
            # Only in case we build the form from an instance
            # (otherwise, 'toppings' list should be empty)
            if kwargs.get('instance'):
                # We get the 'initial' keyword argument or initialize it
                # as a dict if it didn't exist.                
                initial = kwargs.setdefault('initial', {})
                # The widget for a ModelMultipleChoiceField expects
                # a list of primary key for the selected data.
                initial['toppings'] = [t.pk for t in kwargs['instance'].topping_set.all()]
    
            forms.ModelForm.__init__(self, *args, **kwargs)
    
        # Overriding save allows us to process the value of 'toppings' field    
        def save(self, commit=True):
            # Get the unsave Pizza instance
            instance = forms.ModelForm.save(self, False)
    
            # Prepare a 'save_m2m' method for the form,
            old_save_m2m = self.save_m2m
            def save_m2m():
               old_save_m2m()
               # This is where we actually link the pizza with toppings
               instance.topping_set.clear()
               instance.topping_set.add(*self.cleaned_data['toppings'])
            self.save_m2m = save_m2m
    
            # Do we need to save all changes now?
            if commit:
                instance.save()
                self.save_m2m()
    
            return instance
    

    This PizzaForm can then be used everywhere, even in the admin :

    # yourapp/admin.py
    from django.contrib.admin import site, ModelAdmin
    from yourapp.models import Pizza
    from yourapp.forms import PizzaForm
    
    class PizzaAdmin(ModelAdmin):
      form = PizzaForm
    
    site.register(Pizza, PizzaAdmin)
    

    Note

    The save() method might be a bit too verbose, but you can simplify it if you don’t need to support the commit=False situation, it will then be like that :

    def save(self):
        instance = forms.ModelForm.save(self)
        instance.topping_set.clear()
        instance.topping_set.add(*self.cleaned_data['toppings'])
        return instance
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Consider I have defined the following models: class Tag(models.Model): name = models.CharField(max_length=20) class Entry(models.Model):
Consider the following models: class Person(models.Model): name = models.CharField(max_length=128) class Group(models.Model): name = models.CharField(max_length=128)
Consider the following Django models: class Host(models.Model): # This is the hostname only name
The problem is best explained by example, consider the following two models: class Topping(models.Model):
Consider the following example: class Base(models.Model): myfield = models.CharField() class Derived(Base): pass Now, the
Let's consider the following model: class Item(models.Model): pass class TagType(models.Model): tag_name = models.CharField() tag_value_type
Consider the following model: class FPModel(models.Model): # The user who created author = models.ForeignKey(auth.models.User,
Consider the following django model from django.db import models from django.contrib import auth class
Consider the following Model: public class ExportRequestsFilter { [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = {0:dd/MM/yyyy})]
Consider a nonlinear least squares model in R, for example of the following form):

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.