Hello,
I need to change the values of some attributes of an LDAP entry. When I use update() method, I get the error 'UserEntry' object has no attribute 'dump'.
Here is a code example :
class MyView(FormView):
...
def form_valid(self, form):
user_entry = form.instance
username = self.request.user.username
user_entry.objects.filter(pk=username).update(**form.cleaned_data)
return super().form_valid(form)
Here is the traceback:
[11/Jan/2024 01:32:43] "GET /accounts/profile/update/ HTTP/1.1" 200 971
Internal Server Error: /accounts/profile/update/
Traceback (most recent call last):
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/django/views/generic/base.py", line 104, in view
return self.dispatch(request, *args, **kwargs)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/django/utils/decorators.py", line 46, in _wrapper
return bound_method(*args, **kwargs)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapper_view
return view_func(request, *args, **kwargs)
File "/home/user/Projects/portal/accounts/views.py", line 98, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/django/views/generic/base.py", line 143, in dispatch
return handler(request, *args, **kwargs)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/django/views/generic/edit.py", line 153, in post
return self.form_valid(form)
File "/home/user/Projects/portal/accounts/views.py", line 106, in form_valid
user_entry.objects.filter(pk=username).update(**form.cleaned_data)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/ldaporm/managers.py", line 100, in wrapper
return func(self, *args, **kwargs)
File "/home/user/Projects/portal/env/lib64/python3.9/site-packages/ldaporm/managers.py", line 478, in update
new = self.model.from_db(self._attributes, obj.dump())
AttributeError: 'UserEntry' object has no attribute 'dump'
When I set the attribute values directly, it works for me:
class MyView(FormView):
...
def form_valid(self, form):
instance = form.instance
username = self.request.user.username
user_entry = instance.objects.get(pk=username)
for key, value in form.cleaned_data.items():
setattr(user_entry, key, value)
user_entry.save()
return super().form_valid(form)
You seem to be aware of this issue:
|
@needs_pk |
|
def update(self, **kwargs) -> None: |
|
obj = self.get() |
|
# FIXME: obj.dump() does not exist; |
|
new = self.model.from_db(self._attributes, obj.dump()) |
|
for key, value in kwargs.items(): |
|
if key in self.attributes: |
|
setattr(new, key, value) |
|
self.manager.modify(new, old=obj) |
Maybe this report will help resolve it.
Also, it seems it would be useful if Model.save() had an update_fields argument, like in Django Model: https://docs.djangoproject.com/en/4.2/ref/models/instances/#ref-models-update-fields
$ django-admin --version
4.2.8
Hello,
I need to change the values of some attributes of an LDAP entry. When I use
update()method, I get the error'UserEntry' object has no attribute 'dump'.Here is a code example :
Here is the traceback:
When I set the attribute values directly, it works for me:
You seem to be aware of this issue:
django-ldaporm/ldaporm/managers.py
Lines 474 to 482 in 882eb99
Maybe this report will help resolve it.
Also, it seems it would be useful if
Model.save()had anupdate_fieldsargument, like in Django Model: https://docs.djangoproject.com/en/4.2/ref/models/instances/#ref-models-update-fields