1

ユーザーが通常どおり登録、ログイン、ログアウトする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
4

1 に答える 1