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)]
Comments