ManytoMany Relation and Custom widget in Django

13 views
Skip to first unread message

Paul

unread,
Nov 17, 2017, 4:25:50 AM11/17/17
to Django users
I have two models Category and Products.

- a Product can have multiple Categories
- a Category can have multiple Products.
- Categories have a circular Foreign key, to itself.
- not all Categories have the same depth level

Example:

    Category A
        - Category A_1
        - category A_2
            - Category A_2_1
    Category B
    Category C
        - Category C_1


        class Product:
            categories = models.ManyToManyField(Category)
            name = models.CharField(max_length=255)
       
        class Category:
            categories = models.ForeignKey(self)
            name = models.CharField(max_length=255)
   
    As Form I use a ModelForm:
   
        class ProductForm(ModelForm):
   
       
   
                class Meta:
                    model = Product
                    fields = ['categories', 'name', 'short_description', 'description']
                    widgets = {
                        'categories': MyWidget,
                    }

**What I want to achieve:**

I want to implement a conditional select (narow options):

1. Only top parent Categories(level 0 A,B,C) are available
2. The user select a parent Category.  If the parent has children a new Select box appear with his children(category level 1 A1,C1)
3. The user select a level 1 Category (A1,C1). If the parent has children a new Select box appear with his children(level 2 A2)

- The process is repeated until no children are availavable(recursive), an user select the "smallest" category in the tree
- A new button is available for the user to add more categories and start the 1-3 process again
- I want to do the select,add new select using JavaScript
- On Form Submit I want to send only the last children categories


Options I thought:

1. Change the ManyToMany coresponding default Fields - looks like there are no good hooks and/or inheritance
2. Use a non-default custom Field instean of ManytoMany(like Charfield) - more complex on clean,saving Form
3. Change/Inherit the widget. My issues is how to send the data to the default Field on submit, and get/show it on edit
 
I need some help as code and indication how to do this.


Reply all
Reply to author
Forward
0 new messages