我正在尝试更新我的模型,所以当通过管理员检查BooleanField时,它会更新所有其他行以重置为False(0).但是当我继续这样做时,它只返回以下TypeError:'bool'对象不可迭代
这是我的模型:
class Contact(models.Model):
name = models.CharField(max_length=255)
telephone = models.CharField(max_length=255,blank=True)
email = models.CharField(max_length=255,blank=True)
primary_contact = models.BooleanField('Primary Contact')
def __unicode__(self):
return self.name
def make_primary(self):
Contact.objects.filter(id!=self.id).update(primary_contact=False)
def save(self, *args, **kwargs):
if (self.primary_contact == True):
self.make_primary()
super(Contact, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用名为make_primary()的自定义方法在save()期间更新我的行.感觉就像我需要做的事情一样超级简单明了.我是Django的新手,所以这是一个学习曲线.
任何帮助和建议将不胜感激.
谢谢 :)
编辑:
这里要求的是我的追溯/错误如下.此外,我更新了我的代码以使用exclude而错误已更改为:'long'对象不可迭代
Environment:
Request Method: POST
Request URL: http://localhost:8000/admin/contact/contact/1/
Django Version: 1.8.2
Python Version: 2.7.6
Installed Applications:
('grappelli',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'tinymce',
'adminsortable',
'taggit',
'contact')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py" in wrapper
616. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapped_view
110. response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/sites.py" in inner
233. return view(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/adminsortable/admin.py" in change_view
231. form_url='', extra_context=extra_context)
File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py" in change_view
1519. return self.changeform_view(request, object_id, form_url, extra_context)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapper
34. return bound_func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapped_view
110. response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in bound_func
30. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in inner
145. return func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py" in changeform_view
1467. self.save_model(request, new_object, form, not add)
File "/Library/Python/2.7/site-packages/django/contrib/admin/options.py" in save_model
1078. obj.save()
File "/Users/[hidden]/Sites/[hidden]/contact/models.py" in save
37. self.make_primary()
File "/Users/[hidden]/Sites/[hidden]/contact/models.py" in make_primary
28. for oc in other_contacts:
Exception Type: TypeError at /admin/contact/contact/1/
Exception Value: 'long' object is not iterable
Run Code Online (Sandbox Code Playgroud)
这一行无效:
MyModel.objects.filter(id!=self.id)
Run Code Online (Sandbox Code Playgroud)
当你这样做时id!=self.id,表达式的计算结果为False,所以它和做的一样filter(False).这是你的回溯消息中"不可迭代"的bool对象,它实际上与你没有任何关系BooleanField.
执行此操作时filter(id=self.id),您将向该filter方法传递关键字参数.Django没有办法在过滤器中不等于关键字参数.你可以exclude()改用.
MyModel.objects.exclude(id=self.id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1922 次 |
| 最近记录: |