-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
db쪽에 자꾸 에러가 납니다
23.05.11 13:44 작성 23.05.11 14:02 수정 조회수 588
0
현재 MySQL을 사용해서 선생님 강의를 보며 모델을작성중인데 계속 이런 에러가 뜹니다.
django.db.utils.OperationalError: (1054, "Unknown column 'accounts_user.password' in 'field list'")
accounts/models.py
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
./ serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
User = get_user_model()
class SignupSerializer(serializers.ModelSerializer):
#pw 보안
password = serializers.CharField(write_only=True)
def create(self, validated_data):
user = User.objects.create(username=validated_data["username"])
user.set_password(validated_data["password"]) #암호화된 비번 저장
user.save()
return user
class Meta:
model = User
fields = ["pk", "username", "password"]
./views.py
from django.contrib.auth import get_user_model
from django.shortcuts import render
from rest_framework.permissions import AllowAny
from rest_framework.generics import CreateAPIView
from .serializers import SignupSerializer
#회원가입 뷰
#createapiview 이므로 get 메소드 허용X
class SignupView(CreateAPIView):
model = get_user_model()
serializer_class = SignupSerializer
permission_classes = [
AllowAny,#실제로 회원가입할 때는 로그인은 되면 안됨
]
그리고 accounts의 user를 참조하면서 라벨과 이미지를 첨부할 수있는 mainfunc의
./models.py
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
class TImestampedModel(models.Model):
# 기본 필드값
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Post(TImestampedModel):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
label = models.CharField(max_length=50, default='')
images = models.ImageField(upload_to='images/%Y/%m/%d', blank=True)
def __str__(self):
return f'{self.author}'
./views.py
from rest_framework.viewsets import ModelViewSet
from .serializers import PostSerializer
from .models import Post
from rest_framework.permissions import AllowAny
from django.db.models import Q
# CRUD가 모두 들어간 API를 지원
class PostViewSet(ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
#permission_classes = [AllowAny] #FIXME: 인증 적용
def get_queryset(self):
qs = super().get_queryset()
qs = qs.filter(
Q(author=self.request.user) #본인이 작성한 글만 볼 수 있도록 함.
)
return qs
이렇습니다.
구글링해봐도 대부분은 그냥 migrations 된 파일을 삭제하고 다시 migrate 하니까 해결이 되던데 저는 계속 같은 에러가 뜨네요..혹시 뭐가 원인인지 알 수 있을까요?
AbstractUser 로 수정하고나서부터 이런 현상이 나타나긴 했습니다
일단 ERD는 아래와 같이 나옵니다.
답변을 작성해보세요.
1
이진석
지식공유자2023.05.11
안녕하세요.
아래의 오류는 현재 장고 프로젝트가 바라보고 있는 데이터베이스에서 accounts 앱의 User 모델이 바라보는 테이블에서 password 컬럼이 없다는 오류입니다.
django.db.utils.OperationalError: (1054, "Unknown column 'accounts_user.password' in 'field list'")
ERD는 설계문서일 뿐, 현재의 데이터베이스 상황은 데이터베이스에 직접 접속해서 확인하셔야 합니다.
데이터베이스에 접속해서 accounts_user 테이블 내역을 꼭 확인해보세요.
데이터베이스를 삭제하시고 다시 migrate하셔도 동일한 오류가 발생하신다면,
accounts 앱의 마이그레이션 파일 중에 password 필드 생성과 관련된 마이그레이션이 누락이 된 것은 아닌가 싶습니다.
현재 accounts 앱의 마이그레이션 파일을 다른 경로에 백업해두시고,
accounts 앱에 대한 마이그레이션 파일 생성을 다시 해보시고, 서로 비교해보시는 건 어떨까요?
화이팅입니다. :-)
답변 1