asifpy / django-crudbuilder

Generic CRUD implementation in Django
https://django-crudbuilder.readthedocs.org/en/latest/index.html
Apache License 2.0
193 stars 67 forks source link

get request.user in ModelForm #23

Closed andy2046 closed 8 years ago

andy2046 commented 8 years ago

Hi asifpy,

Could you please help to advise how can I get request.user in forms.py and crud.py, in normal view.py I can use below to pass.

form = inventoryForm(user=request.user)

in forms.py class inventoryForm(forms.ModelForm): class Meta: model = inventory fields = 'all'

def __init__(self, *args, **kwargs):
    user = kwargs.pop('user',None)
    super(inventoryForm, self).__init__(*args, **kwargs) 
    self.fields['appcode'].queryset = Applicationin.objects.filter(code__in=getAppcodeList(user))

in crud.py

class inventoryCrud(BaseCrudBuilder): model = inventory custom_modelform = inventoryForm search_fields = ['appcode__code','appcode_desc','hostname','alias','env','tier'] ... login_required=True permission_required=False inlineformset = inventoryInlineFormset

andy2046 commented 8 years ago

in inventoryForm the user I get is None

class inventoryForm(forms.ModelForm): class Meta: model = inventory fields = 'all'

def init(self, _args, *_kwargs): user = kwargs.pop('user',None)

asifpy commented 8 years ago

You can now get request param in your forms __init__. Resolved here https://github.com/asifpy/django-crudbuilder/commit/543ed2e9cc47d7692725babd46069ee7d7adb626.

Check here : Custom forms in crudbuilder

andy2046 commented 8 years ago

Hi asifpy,

I tested but still None error, what I added in is as following:

mixins.py class CreateUpdateViewMixin(CrudBuilderMixin): """Common form_valid() method for both Create and Update views""" def get_form_kwargs(self): kwargs = super(CreateUpdateViewMixin, self).get_form_kwargs() if self.custom_form: kwargs.update({'request': self.request}) return kwargs

views.py def generate_create_view(self): """Generate class based view for CreateView"""

    name = model_class_form(self.model + 'CreateView')
    create_args = dict(
        form_class=self.get_actual_form('create'),
        model=self.get_model_class,
        template_name=self.get_template('create'),
        permissions=self.view_permission('create'),
        permission_required=self.check_permission_required,
        login_required=self.check_login_required,
        inlineformset=self.inlineformset,
        success_url=reverse_lazy('{}-{}-list'.format(self.app, self.model)),
        custom_form=self.createupdate_forms or self.custom_modelform
        )
def generate_update_view(self):
    """Generate class based view for UpdateView"""

    name = model_class_form(self.model + 'UpdateView')
    update_args = dict(
        form_class=self.get_actual_form('update'),
        model=self.get_model_class,
        template_name=self.get_template('update'),
        permissions=self.view_permission('update'),
        permission_required=self.check_permission_required,
        login_required=self.check_login_required,
        inlineformset=self.inlineformset,
        custom_form=self.createupdate_forms or self.custom_modelform,
        success_url=reverse_lazy('{}-{}-list'.format(self.app, self.model))
        )

my own form: class inventoryForm(forms.ModelForm): class Meta: model = inventory fields = 'all'

def __init__(self, *args, **kwargs):
    self.request = kwargs.pop('request', None)
    user1 = self.request.user
    pprint(user1)
    super(inventoryForm, self).__init__(*args, **kwargs)

AttributeError at /incident/crud/bd_incident/inventories/create/ 'NoneType' object has no attribute 'user' Request Method: GET Request URL: http://localhost:8999/incident/crud/bd_incident/inventories/create/ Django Version: 1.8.6 Exception Type: AttributeError Exception Value:
'NoneType' object has no attribute 'user' Exception Location: ...\bd_incident\forms.py in init, line 26

andy2046 commented 8 years ago

Hi, After added in to CrudBuilderMixin, problem solved, thx

class CrudBuilderMixin(LoginRequiredMixin, PermissionRequiredMixin): """