ユーザーが通常どおり登録、ログイン、ログアウトするDjango webappがあります。ユーザーが自分のアカウントを「削除」するとき、実際には削除したくありません (それを指す外部キーがあるため)。をマークしたいだけですUser.is_active = False
。また、ユーザーが同じメール アドレスで新しいアカウントを作成できるように、メール アドレス (ユーザー名ではなく) を削除したいと考えています。どうやってするの?
以下に示すように、メール アドレスを から削除しようとすると、削除User
できなくなります。この操作が本当に許可されていない場合、削除されたユーザーが同じメールアドレスで再登録できるようにしたいというこの問題を、他の人はどのように解決するのでしょうか? メールアドレスを のようなダミーの値に変更することもできると思いますdummy@dummy.net
が、それは本当に醜いようです。
>>> from django.contrib.auth.models import User
>>> x = User.objects.get(username="someuser")
>>> x.email = None
>>> x.save()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/models/base.py", line 591, in save
force_update=force_update, update_fields=update_fields)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/models/base.py", line 619, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/models/base.py", line 681, in _save_table
forced_update)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/models/base.py", line 725, in _do_update
return filtered._update(values) > 0
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/models/query.py", line 600, in _update
return query.get_compiler(self.db).execute_sql(CURSOR)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1004, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 786, in execute_sql
cursor.execute(sql, params)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/backends/utils.py", line 81, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "MyVirtualEnv/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 128, in execute
return self.cursor.execute(query, args)
File "MyVirtualEnv/lib/python2.7/site-packages/MySQLdb/cursors.py", line 207, in execute
if not self._defer_warnings: self._warning_check()
File "MyVirtualEnv/lib/python2.7/site-packages/MySQLdb/cursors.py", line 117, in _warning_check
warn(w[-1], self.Warning, 3)
Warning: Column 'email' cannot be null