Extension to the normal ManyToManyField to support default values.
Build for the following use case:
publish_on = ManyToManyFieldWithDefault(Site, verbose_name=_('publish on'), default=Site.objects.get_current)
Where with a plain ManyToManyField the default site will not be selected. The ManyToManyFieldWithDefault fixes this by automatically selecting the default value if no other selections are given.
When the field also have null=True and Blank=True it will not select the default !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | from django import oldforms
from django.db import models
from django.utils.functional import curry
class SelectMultipleFieldWithDefault(oldforms.SelectMultipleField):
def __init__(self, default_choice=None, *args, **kwargs):
self.__default_choice = default_choice
super(SelectMultipleFieldWithDefault, self).__init__(*args, **kwargs)
def render(self, data):
if not data and self.__default_choice:
data = [self.__default_choice.id]
return super(SelectMultipleFieldWithDefault, self).render(data)
class ManyToManyFieldWithDefault(models.ManyToManyField):
def __init__(self, *args, **kwargs):
if not kwargs.get('blank', False) and not kwargs.get('null', False):
self.__default_choice = kwargs.get('default', None)
else:
self.__default_choice = None
super(ManyToManyFieldWithDefault, self).__init__(*args, **kwargs)
def get_manipulator_field_objs(self):
if self.rel.raw_id_admin:
return [oldforms.RawIdAdminField]
else:
choices = self.get_choices_default()
return [curry(SelectMultipleFieldWithDefault, size=min(max(len(choices), 5), 15), choices=choices, default_choice=self.__default_choice)]
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 2 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 6 months ago
Comments
Please login first before commenting.