LoginSignup
0
0

More than 1 year has passed since last update.

Djangoアプリ開発【友達リスト】〜その⑥〜

Last updated at Posted at 2021-06-15

はじめに

今回はDjangoを使って友達リスト的なアプリを作成しようと思います。
プロジェクト名はTomodachi

ユーザー作成時にデフォルトカテゴリを作成する(エラー解決のため)

# ブランチを切り替える
$ git branch feature-user-add-category
$ git checkout feature-user-add-category

ユーザー作成時にデフォルトカテゴリを作成(エラー解決のため)

friendslist/models.py
# ユーザー作成時にデフォルトカテゴリを作成する
@receiver(post_save, sender=User)
def create_category(sender, **kwargs):
    if kwargs['created']:
        default_category = Category.objects.create(user=kwargs['instance'])
        default_category.name = "デフォルト"
        default_category.save()

友達一覧を自分が作成した友達のみにする(ユーザーと友達にもリレーションを貼る)

friendslist/models.py
# ユーザーと友達のリレーション
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
friendslist/views.py
# 友達一覧と作成をユーザーに紐付ける
def index(request):
    user = request.user
    categories = Category.objects.filter(user=user)
    first_category = categories.first()
    friends = Friend.objects.filter(user=user)  ←☆追加する
    context = {
        'friends': friends,
        'categories': categories,
        'first_category': first_category,
    }
    return render(request, 'friendslist/index.html', context)

def create(request):
    if request.method == 'POST':
        form = FriendForm(request.POST)
        if form.is_valid():
            friend = form.save(commit=False)
            friend.user = request.user ←☆追加する
            friend.save()
            return redirect('/')

    user = request.user
    categories = Category.objects.filter(user=user)
    first_category = categories.first()
    context = {
        'categories': categories,
        'first_category': first_category,
    }
    return render(request, 'friendslist/create.html', context)

まだ新規登録直後のエラーが解消されないので、仕様変更

friendslist/views.py
# 新規登録したら直接ログインではなく、ログイン画面からログインしてもらう(応急処置)
def signup(request):
  context = {}
  if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
      user = form.save(commit=False)
      # user.is_active = False
      user.save()
      messages.success(request, '登録完了!!!')
      return redirect('/login/')  ←☆('/')から変更

おそらく問題は、ユーザー作成直後カテゴリ作成のタイミングが遅いのかな?
そこをどうするかが問題。

 もう一個エラーがあった

friendslist/views.py
# 誕生日がなければそのままNoneにする
    if friend.birthday is not None:
        friend_birthday = "{0:%Y-%m-%d}".format(friend.birthday)
    else:
        friend_birthday = friend.birthday

さいごに

今回は新規登録後にデフォルトカテゴリ作成の処理をしましたが
もともとのエラーが解決できませんでした。
そのため応急処置として
新規登録後は一度ログインすることにしました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0