code_junkie

Dynamically update ModelForm's Meta class

Nov 12th, 2011
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. from django.forms import ModelForm
  2.  
  3. from testprogram.online_bookings.models import Passenger
  4.  
  5. class PassengerInfoForm(ModelForm):
  6.  
  7. def set_form_excludes(self, exclude_list):
  8. self.Meta.exclude = excludes_list
  9.  
  10. class Meta:
  11. model = Passenger
  12. exclude = []
  13.  
  14. def get_form(exclude_list):
  15. class myform(ModelForm):
  16. class Meta:
  17. model = Passenger
  18. exclude = exclude_list
  19. return myform
  20.  
  21. frm_class = get_form( ('field1', 'field2') )
  22. form = frm_class()
  23.  
  24. def PassengerForm(exclude_list, *args, **kwargs):
  25. class MyPassengerForm(ModelForm):
  26. class Meta:
  27. model = Passenger
  28. exclude = exclude_list
  29.  
  30. def __init__(self):
  31. super(MyPassengerForm, self).__init__(*args, **kwargs)
  32.  
  33. return MyPassengerForm()
  34.  
  35. form = PassengerForm( ('field1', 'field2') )
  36.  
  37. class PassengerInfoForm(ModelForm):
  38. def __init__(self, *args, **kwargs):
  39. exclude_list = kwargs['exclude_list']
  40. del kwargs['exclude_list']
  41.  
  42. super(PassengerInfoForm, self).__init__(*args, **kwargs)
  43.  
  44. for field in exclude_list:
  45. del self.fields[field]
  46.  
  47. class Meta:
  48. model = Passenger
  49.  
  50. form = PassengerInfoForm(exclude_list=['field1', 'field2'])
  51.  
  52. from django.contrib.admin.widgets import AdminDateWidget
  53. from django.forms import ModelForm
  54. from django.db import models
  55.  
  56. def ModelFormFactory(some_model, *args, **kwargs):
  57. """
  58. Create a ModelForm for some_model
  59. """
  60. widdict = {}
  61. # set some widgets for special fields
  62. for field in some_model._meta.local_fields:
  63. if type(field) is models.DateField:
  64. widdict[field.name] = AdminDateWidget()
  65.  
  66. class MyModelForm(ModelForm): # I use my personal BaseModelForm as parent
  67. class Meta:
  68. model = some_model
  69. widgets = widdict
  70.  
  71. return MyModelForm(*args, **kwargs)
Add Comment
Please, Sign In to add comment