Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django import forms
- from . import forms as forms_module
- class NoClassFormForCategory(Exception):
- def __init__(self, category):
- self.message = "Can't find form class for category: [{}], pk: [{}], ad_class: [{}] in forms module: [{}]" \
- .format(category.name, category.pk, category.ad_class, forms_module.__name__)
- class AddAdForm:
- def __init__(self, category_pk, add_contact_mixin=False):
- self.category = Category.objects.get(pk=category_pk)
- self.form_classes = [(getattr(forms_module, c).__name__.split('_')[1], getattr(forms_module, c))
- for c in dir(forms_module) if c.startswith('Add_')]
- self.add_contact_mixin = add_contact_mixin
- def create(self, *args, **kwargs):
- classes = [c[1] for c in self.form_classes if self.category.ad_class == c[0]]
- if len(classes) == 0:
- raise NoClassFormForCategory(self.category)
- class_obj = classes[0]
- if self.add_contact_mixin:
- if ContactFormMixin not in class_obj.__bases__:
- print(class_obj.__bases__)
- class_obj.__bases__ = (ContactFormMixin,) + class_obj.__bases__
- print(class_obj.__bases__)
- cinst = class_obj(*args, **kwargs)
- print(ci.fields)
- return class_obj(*args, **kwargs)
- class ContactFormMixin(forms.Form):
- contact_telephone = forms.CharField(max_length=200, label='Телефон')
- class Add_AdRealtyBuy_Form(forms.Form):
- name = forms.CharField(max_length=200, label='Название realty')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement