ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL 2023.04.11
    내일배움캠프 2023. 4. 11. 20:50

    팀 프로젝트 중 문제를 겪었던 부분들~

     

    깃허브 풀 푸쉬에서 애를 먹었는데

    커밋을 하고 풀을 한 후 충돌을 해소한 뒤 다시 커밋해주면 됩니다.

     

    다음 게시글폼에서 유저를 안넣어줘서 오류가 났던 부분입니다.

    class TweetForm(forms.ModelForm):
        class Meta:
            model = TweetModel
            fields = ['user', 'image', 'content']

    먼저 forms.py의 fields에 'user'를 안넣어주면 에러가 난다고 하시더군요.

    @login_required
    def create_tweet(request):
        if request.method == 'GET':
            tweet_create = TweetForm()
            return render(request, 'tweet/create.html', {'create_tweet_form': tweet_create})
        
        elif request.method == 'POST':
            user = request.user
            tweet_form = TweetForm(request.POST)
            tweet_form_post = tweet_form.save(commit=False)
            tweet_form_post.save()
            return redirect('/')

    그리고 views.py에는 이렇게 작성해주셨습니다.

     

    우선 이렇게 코드를 짜게 되면 게시글 작성할 때 폼에 유저가 들어가기 때문에 작성 시 유저를 선택하는 칸이 존재해버립니다.

    그리고 저장은 잘 되겠죠 유저 정보를 받아오니까,

     

    하지만 우리는 게시글 작성할 때 유저를 고를 수 있으면 안됩니다.

    로그인한 유저 정보를 받아와야 합니다.

     

    class TweetForm(forms.ModelForm):
        class Meta:
            model = TweetModel
            fields = ['image', 'content']

    그래서 forms.py의 fields에선 'user'를 빼줍니다. 그러면 작성시에 유저를 선택하는 칸은 없어지겠죠?

    @login_required
    def create_tweet(request):
        if request.method == 'GET':
            tweet_create = TweetForm()
            return render(request, 'tweet/create.html', {'create_tweet_form': tweet_create})
        
        elif request.method == 'POST':
            user = request.user
            tweet_form = TweetForm(request.POST)
            tweet_form_post = tweet_form.save(commit=False)
            tweet_form_post.user = user
            tweet_form_post.save()
            return redirect('/')

    그리고 views.py에는 한 줄을 추가해줍니다

    tweet_form_post.user = user

    tweet_form은 그냥 저장하게 될 경우 user 정보를 받아오지 않았기 때문에 에러가 납니다.

    그래서 tweet_form_post 라는 변수에 임시로 저장을 해주고

    tweet_form_post.user 로 유저필드를 지칭해주고 user 데이터를 저장해줍니다

    그리고 tweet_form_post.save() 로 폼데이터를 저장해주면 끝

    문제가 해결됩니다~

    '내일배움캠프' 카테고리의 다른 글

    TIL 2023.04.13  (0) 2023.04.13
    TIL 2023.04.12  (0) 2023.04.12
    TIL 2023.04.10  (0) 2023.04.10
    WIL 내일배움캠프 4주차  (0) 2023.04.07
    TIL 2023.04.07  (0) 2023.04.07
Designed by Tistory.