Django: can't iterate over and access a simple queryset - python

For my API, I have to find out to what projects a user has access to, and return them. I try to do this like so:
def get_queryset(self):
user = self.request.user
allow_all = user.is_superuser or user.is_staff or settings.API_UNSAFE
if self.action == 'list' and not allow_all:
projects = Project.objects.all()
user_projects = Project.objects.none()
for project in projects:
permission = Permission.objects.filter(user=user.user, table_name='Project', fk=project.id)
if permission.count() > 0:
user_projects = user_projects | project
return user_projects
return Project.objects.all()
Which results in:
'Project' object is not iterable
So I used values() instead of all(). But when you use .values it's no longer possible to concat the instance with a queryset. Meaning I have to query the same project twice, resulting in this hacky approach:
projects = Project.objects.values()
user_projects = Project.objects.none()
for project in projects:
permission = Permission.objects.filter(user=user.user, table_name='Project', fk=project['id'])
if permission.count() > 0:
# Wanted to use .get() here, but that threw the same error
user_project = Project.objects.filter(id=project['id'])
user_projects |= user_project
return user_projects
Surely there is a better way, what am I doing wrong?
Stacktrace:
Environment:
Request Method: GET
Request URL: http://localhost:8000/api/projects/
Django Version: 2.0.6
Python Version: 3.7.0
Installed Applications:
['apps.api',
'rest_framework',
'apps.dashboard',
'apps.login',
'apps.base',
'sass_processor',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_seed',
'rest_framework.authtoken']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/viewsets.py" in view
95. return self.dispatch(request, *args, **kwargs)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
494. response = self.handle_exception(exc)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/views.py" in handle_exception
454. self.raise_uncaught_exception(exc)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/views.py" in dispatch
491. response = handler(request, *args, **kwargs)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/mixins.py" in list
48. return Response(serializer.data)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/serializers.py" in data
742. ret = super(ListSerializer, self).data
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/serializers.py" in data
262. self._data = self.to_representation(self.instance)
File "/Users/Ruben/Documents/Projects/BIM_Github/bim-data-manager/venv/lib/python3.7/site-packages/rest_framework/serializers.py" in to_representation
660. self.child.to_representation(item) for item in iterable
Exception Type: TypeError at /api/projects/
Exception Value: 'Project' object is not iterable

The error has nothing at all to do with accessing the project ID.
The result of | between an empty queryset and an instance is the instance. So this means that when your permission exists, your user_projects variable becomes a single instance; then, later, the serializer fails as it is expecting a queryset.
You've already got a better way of doing this in a single query, but for reference if you did want to build up a list like this the better way would be to accumulate the IDs and then get them all in one query at the end; or, simply append the instances to a list.

Related

RelatedObjectDoesNotExist at /profiles/user-follow-feed/ User has no user

Well i am just trying to show feed back of the following users but got an error:RelatedObjectDoesNotExist at /profiles/user-follow-feed/
User has no user. I don't understand how can i fix it. Need help to fix it out. many thanks in advance.
views.py
class FolloweHomeView(View):
def get(self, request, *args, **kwargs):
user = request.user.userprofile
is_following_user_ids = [x.user.id for x in user.follower.all()]
qs = Post.objects.filter(username__id__in=is_following_user_ids).order_by("-create_date")[:3]
return render(request, "profiles/follower_home_feed.html", {'object_list': qs})
models.py
class ProfileManager(models.Manager):
def toggle_follow(self, request_user, username_to_toggle):
profile_ = UserProfile.objects.get(user__username__iexact=username_to_toggle)
user = request_user
is_following = False
if user in profile_.follower.all():
profile_.follower.remove(user)
else:
profile_.follower.add(user)
is_following = True
return profile_, is_following
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
follower = models.ManyToManyField(User, related_name ='is_following',blank=True,)
avatar = models.ImageField(("Avatar"), upload_to='displays', default = '1.jpg',height_field=None, width_field=None, max_length=None,blank = True)
create_date = models.DateField(auto_now_add=True,null=True)
objects = ProfileManager()
def __str__(self):
return f'{self.user.username}'
traceback:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/profiles/user-follow-feed/
Django Version: 3.0.3
Python Version: 3.8.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap3',
'accounts',
'posts',
'profiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\AHMED\grapPub\grabpublic\profiles\views.py", line 99, in get
is_following_user_ids = [x.user.id for x in user.follower.all()]
File "C:\Users\AHMED\grapPub\grabpublic\profiles\views.py", line 99, in <listcomp>
is_following_user_ids = [x.user.id for x in user.follower.all()]
File "C:\Users\AHMED\anaconda3\lib\site-packages\django\db\models\fields\related_descriptors.py", line 420, in __get__
raise self.RelatedObjectDoesNotExist(
Exception Type: RelatedObjectDoesNotExist at /profiles/user-follow-feed/
Exception Value: User has no user.
if more detail is require than tell me i will update my question with that information
The follower is a ManyToManyField to the User model, so the x in the list comprehension is a User object:
is_following_user_ids = [x.id for x in user.follower.all()]
You however do not need to perform this kind of logic, you can directly filter with:
qs = Post.objects.filter(
username__user__is_following__user=request.user
).order_by('-create_date')[:3]
this will query the Post objects in a single query.
Note: A ForeignKey does not store the string representation (or name) of the
referenced object in the column, it stores the primary key of the record it
references in a column with an _id suffix to a ForeignKey field. Therefore
ForeignKeys usually do not end with a name suffix. You might want to
consider renaming the username field to author.
Note: You can limit views to a class-based view to authenticated users with the
LoginRequiredMixin mixin [Django-doc].

Django templated mail 'dict' object has no attribute 'get_host'

I'm trying to send a verification email after a user registers an account using django-templated-mail.
This is the error I get after the user is created:
AttributeError 'dict' object has no attribute 'get_host'
So Django is trying to call get_host() and is unable to? So it's an error because it can't retrieve my host name?
Can someone point out what am I missing here?
class UserListView(generics.ListCreateAPIView):
serializer_class = UserSerializer
def perform_create(self, serializer):
user = serializer.save()
context = {'user': user}
to = user.email
email.ActivationEmail(context).send(to)
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'password', 'email')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
password = validated_data.pop('password')
user = super(UserSerializer, self).create(validated_data)
user.set_password(password)
user.save()
return user
class ActivationEmail(BaseEmailMessage):
template_name = 'email/activation.html'
def get_context_data(self):
context = super(ActivationEmail, self).get_context_data()
user = context.get('user')
context['uid'] = utils.encode_uid(user.pk)
context['token'] = default_token_generator.make_token(user)
context['url'] = 'verify/{uid}/{token}'.format(**context)
return context
Traceback:
Environment:
Request Method: POST
Request URL: http://localhost:8000/users/
Django Version: 2.0
Python Version: 3.6.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'templated_mail',
'accounts',]
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'simple_history.middleware.HistoryRequestMiddleware']
Traceback:
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/generic/base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
483. response = self.handle_exception(exc)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
443. self.raise_uncaught_exception(exc)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
480. response = handler(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/generics.py" in post
244. return self.create(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/mixins.py" in create
21. self.perform_create(serializer)
File "/code/accounts/views.py" in perform_create
54. email.ActivationEmail(context).send(to)
File "/usr/local/lib/python3.6/site-packages/templated_mail/mail.py" in send
69. self.render()
File "/usr/local/lib/python3.6/site-packages/templated_mail/mail.py" in render
61. context = make_context(self.get_context_data(), request=self.request)
File "/code/accounts/email.py" in get_context_data
12. context = super(ActivationEmail, self).get_context_data()
File "/usr/local/lib/python3.6/site-packages/templated_mail/mail.py" in get_context_data
33. site = get_current_site(self.request)
File "/usr/local/lib/python3.6/site-packages/django/contrib/sites/shortcuts.py" in get_current_site
16. return RequestSite(request)
File "/usr/local/lib/python3.6/site-packages/django/contrib/sites/requests.py" in __init__
10. self.domain = self.name = request.get_host()
Exception Type: AttributeError at /users/
Exception Value: 'dict' object has no attribute 'get_host'
Thank you much appreciate any help you may be able to render.
ActivationEmail takes the request as the first positional argument to its initializer. You're passing the context as the first positional argument, which causes ActivationEmail to fall over.
Make sure you pass the request instance as well as the context to ActivationEmail when you create it.
email.ActivationEmail(self.request, context).send(to)
You instantiated ActivationEmail incorrectly. The request parameter should be an HttpRequest object instead of a dict.

Django : 'unicode' object has no attribute 'get'

I had a problem with my Django program. I'm a beginner in Django, I was looking for an answer with different posts with the same error than mine but no success ...
Here's my traceback :
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/pod
Django Version: 1.11.2
Python Version: 2.7.13
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'labinit',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\exception.py" in inner
41. response = get_response(request)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\admin\Desktop\django_learneo3\Learneo\labinit\views.py" in groupe_pod
121. if form.is_valid():
File "C:\Python27\lib\site-packages\django\forms\forms.py" in is_valid
183. return self.is_bound and not self.errors
File "C:\Python27\lib\site-packages\django\forms\forms.py" in errors
175. self.full_clean()
File "C:\Python27\lib\site-packages\django\forms\forms.py" in full_clean
384. self._clean_fields()
File "C:\Python27\lib\site-packages\django\forms\forms.py" in _clean_fields
396. value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
File "C:\Python27\lib\site-packages\django\forms\widgets.py" in
value_from_datadict
639. getter = data.get
Exception Type: AttributeError at /pod
Exception Value: 'unicode' object has no attribute 'get'
This issue appears since I have changed my init fonction, for the form that I use in my view :
Forms:
class Groupe_Form(forms.ModelForm) :
def __init__(self, nom_groupe, *args, **kwargs):
super(Groupe_Form,self).__init__(*args, **kwargs)
self.fields['pod'].widget = forms.Select()
pod1 = Groupe.objects.filter(nom_groupe = nom_groupe).values_list('pod', flat = True)
pods = list(pod1)
self.fields['pod'].queryset = Pod.objects.filter(id__in=pods)
class Meta:
model = Groupe
fields = ['pod']
Views :
def groupe_pod(request):
global new_groupe
grp = new_groupe
form = forms.Groupe_Form(request.POST, grp)
if request.method == 'POST':
if form.is_valid():
print "form was valid"
data_groupe_pod = request.POST.get('grp_pod')
print "data_groupe :", data_groupe_pod
global new_cours
print new_cours
if new_cours == "ICND1":
return redirect('http://127.0.0.1:8000/icnd_1')
elif new_cours == "ICND2":
return redirect('http://127.0.0.1:8000/icnd_2')
else :
form = forms.Groupe_Form(new_groupe)
return render(request, 'pod.html', locals())
I've tried many things, I really don't know where is the problem in my Django code.
Your form's __init__ method is:
def __init__(self, nom_groupe, *args, **kwargs):
Therefore you should instantiate it with:
form = forms.Groupe_Form(grp, request.POST)
You currently have the arguments the other way round.
Your __init__ signature has as its first parameter nom_groupe. In form = forms.Groupe_Form(request.POST, grp) you pass request.POST as the first parameter. You have to switch the parameters:
form = forms.Groupe_Form(grp, request.POST)

Attribute error queryset.filter() django

So I got a method in views.py that checks if a certain product is saved in the session variables. If this is the case then it will look up the ID of the product in mongodb in order to filter a queryset on a few attributes of this product. I have the following code:
def moederbordenComp(request,objectlijst):
objectlijst_filtered = objectlijst
if "processorenid" in request.session:
processor= Processoren.objects.get(id=request.session["processorenid"])
objectlijst_filtered = objectlijst.filter(Socket__icontains=processor.Socket)
if "behuizingenid" in request.session:
behuizing = Behuizingen.objects.get(id=request.session["behuizingenid"])
objectlijst_filtered = objectlijst.filter(Form_Factor__icontains=behuizing.Form_Factor)
if "geheugenid" in request.session:
geheugen = Geheugen.objects.get(id=request.session["geheugenid"])
objectlijst_filtered = objectlijst.filter(Geheugentype__icontains=geheugen.Geheugentype)
objectlijst_filtered = objectlijst.filter(Geheugentype__icontains=geheugen.Aantal)
if "hardeid" in request.session:
harde = Harde.objects.get(id=request.session["hardeid"])
objectlijst_filtered = objectlijst.filter(Hardeschijf_bus__icontains=harde.Hardeschijf_bus)
return objectlijst_filtered
So basically. If processorenid exists then filter the queryset called "objectlist" so that only the motherboards remain that contain the processor.Socket.
Now for the real issue:
whenever I remove the objectlijst_filtered and just return the objectlijst (so unfiltered, without doing anything) everything works fine. However if I try to return and then use objectlijst_filtered or even print objectlijst_filtered it raises the following error:'list' object has no attribute 'join'
This is the complete error traceback:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/moederborden/
Django Version: 1.7
Python Version: 2.7.3
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'pcbuilder')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/robin/Work/School/A-Pc/Website/pcbuilder/views.py" in moederborden
728. moederbordenlijst = compatibility(request,moederbordenlijst)
File "/home/robin/Work/School/A-Pc/Website/pcbuilder/compatibility.py" in compatibility
6. objectlijst_filtered = moederbordenComp(request,objectlijst)
File "/home/robin/Work/School/A-Pc/Website/pcbuilder/compatibility.py" in moederbordenComp
34. print objectlijst_filtered
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/queryset.py" in __repr__
58. self._populate_cache()
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/queryset.py" in _populate_cache
93. self._result_cache.append(self.next())
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/base.py" in next
1137. raw_doc = self._cursor.next()
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/base.py" in _cursor
1182. self._cursor_obj = self._collection.find(self._query,
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/base.py" in _query
1215. self._mongo_query = self._query_obj.to_query(self._document)
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/visitor.py" in to_query
92. query = query.accept(QueryCompilerVisitor(document))
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/visitor.py" in accept
157. return visitor.visit_query(self)
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/visitor.py" in visit_query
80. return transform.query(self.document, **query.query)
File "/usr/local/lib/python2.7/dist-packages/mongoengine/queryset/transform.py" in query
87. value = field.prepare_query_value(op, value)
File "/usr/local/lib/python2.7/dist-packages/mongoengine/fields.py" in prepare_query_value
106. value = re.escape(value)
File "/usr/lib/python2.7/re.py" in escape
214. return pattern[:0].join(s)
Exception Type: AttributeError at /moederborden/
Exception Value: 'list' object has no attribute 'join'
Any help would be greatly appreciated. I've used the filter method in several other parts of the project without any issues so I'm at a loss.
Thanks in advance.

django when adding data from admin interface: TypeError at admin/... unicode object not callable

I'm getting an error when trying to save to the following model using the admin interface:
models.py
class Answer(models.Model):
a = models.TextField(primary_key=True)
gloss = models.TextField(blank=True)
clean = models.TextField(blank=True)
count = models.IntegerField(blank=True)
p = models.IntegerField(blank=True)
def __unicode__(self):
return u"%s" % self.a
class Meta:
db_table = u'answers'
here's the error message that shows up on the admin interface:
Environment:
Request Method: POST
Request URL: http://localhost:8000/admin/emotions/answer/add/
Django Version: 1.4 pre-alpha SVN-16322
Python Version: 2.6.2
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'emo20qBrowser.emotions']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/home/abe/bin/django-trunk/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/home/abe/bin/django-trunk/django/contrib/admin/options.py" in wrapper
316. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/home/abe/bin/django-trunk/django/utils/decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "/home/abe/bin/django-trunk/django/views/decorators/cache.py" in _wrapped_view_func
77. response = view_func(request, *args, **kwargs)
File "/home/abe/bin/django-trunk/django/contrib/admin/sites.py" in inner
196. return view(request, *args, **kwargs)
File "/home/abe/bin/django-trunk/django/utils/decorators.py" in _wrapper
25. return bound_func(*args, **kwargs)
File "/home/abe/bin/django-trunk/django/utils/decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "/home/abe/bin/django-trunk/django/utils/decorators.py" in bound_func
21. return func(self, *args2, **kwargs2)
File "/home/abe/bin/django-trunk/django/db/transaction.py" in inner
211. return func(*args, **kwargs)
File "/home/abe/bin/django-trunk/django/contrib/admin/options.py" in add_view
871. if form.is_valid():
File "/home/abe/bin/django-trunk/django/forms/forms.py" in is_valid
121. return self.is_bound and not bool(self.errors)
File "/home/abe/bin/django-trunk/django/forms/forms.py" in _get_errors
112. self.full_clean()
File "/home/abe/bin/django-trunk/django/forms/forms.py" in full_clean
269. self._post_clean()
File "/home/abe/bin/django-trunk/django/forms/models.py" in _post_clean
331. self.instance.clean()
Exception Type: TypeError at /admin/emotions/answer/add/
Exception Value: 'unicode' object is not callable
Okay, I think I figured it out... I'm using a variable/column called "clean". Django's admin interface has a method called "clean()" also, which does some kind of validation. It appears that there was some kind of naming conflict so I changed the variable to name to "cleaned" and then to make sure that it knows what database field to use (I'm using a legacy/preexisting db), I added a db_column option:
cleaned = models.TextField(blank=True,db_column="clean")
It would have been nice to know that "clean" was a reserved identifier in django but at least I only wasted half a day on this django stuff which ostensibly makes database operations easier. To be fair, I just started django this morning and if I would have found and answer on stackoverflow it would have been a breeze to fix.
If anyone knows a better way to handle this, let me know...

Categories