

## 既存のDBを用いて定義されたモデルクラスに関して、Userモデルの拡張を行いたい

##現状  
既に使用されている MySQLのDB情報をDjangoのDBとして使用しています。  
初めにこのDB情報に関して、`settings.py`に書き込みました。

[code]

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'database_name', #　作成したデータベース名
            'USER': 'root', # ログインユーザー名
            'PASSWORD': 'my_password', # 同上。そのパスワード
        }
    }
    
[/code]

続いて、`python manage.py inspectdb >> my_app/models.py`を使用して、`models.py`に反映させました。  
その結果、

[code]

    class User(models.Model):
        user_id = models.CharField(primary_key=True, max_length=255)
    
[/code]

が作成されました。

この`user_id`を用いてログインの実装を行いたいです。  
（フォームに入力があり、バックエンドでuser_idを元にログイン実装が行いたいです）

ログインにかかる`views.py`は下記のようになっています。

[code]

    class Account_login(View): #ログインテンプレート
        def post(self, request, *arg, **kwargs): #POST時
            form = LoginForm(data=request.POST)
            if form.is_valid():
                user_id = form.cleaned_data.get('username')
                user = User.objects.get(user_id=user_id)
                login(request, user)
                return redirect('/')
            return render(request, 'accounts/login.html', {'form': form,})
    
        def get(self, request, *args, **kwargs): #GET時
            form = LoginForm()
            return render(request, 'accounts/login.html', {'form': form,})
    
[/code]

この`user_id`を用いてログインの実装を行うためには、Userモデルの拡張が必要だと考えました。特に今回試みたのは、[こちら](https://hodalog.com/how-
to-extend-django-user-model/)にあるような`models.OneToOneField`を使用しようと思い、

[code]

    from django.contrib.auth.models import User
    
    class User(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        user_id = models.CharField(primary_key=True, max_length=255)
    
[/code]

としました。これを踏まえて、`python manage.py runserver`を行うと

`src.User.user_id: (models.E006) The field 'user_id' clashes with the field
'user' from model 'src.user'.`  
とエラーが返されました。`user_id`が`'user'`とクラッシュしているとのことで、このようなエラーが出ていると考えていますが、目的としては、既存のDBで定義された`user_id`をDjangoのログイン認証時のキーとしたいため、このエラーを乗り越えるため`user_id`を削除すると、目的が果たせません。上記の手法以外でも構いません。解決法やヒント、リンクなどで構いませんので、お力をお貸し下さい。よろしくお願いします。


CC BY-SA 4.0
2021-07-28T08:23:29.680
78443
2021-07-28T08:23:29.680
36470
question
python mysql django
既存のDBを用いてUserモデルの拡張を行いたい