tweet/models.py:
from django.db import models
from user.models import UserModel
class TweetModel(models.Model):
class Meta:
db_table = "tweet"
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
content = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class TweetComment(models.Model):
class Meta:
db_table = "comment"
tweet = models.ForeignKey(TweetModel, on_delete=models.CASCADE)
author = models.ForeignKey(UserModel, on_delete=models.CASCADE)
comment = models.CharField(max_length=256)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
tweet/views.py:
@login_required #로그인한 사용자만 접근 가능
def detail_tweet(request, id): # 글, 댓글 불러오기
if request.method == 'GET':
user = request.user.is_authenticated # 사용자의 로그인 확인
if user:
content = TweetModel.objects.get(id=id)
comment = TweetComment.objects.filter(tweet_id=id)
return render(request, 'tweet/tweet_detail.html', {'tweet': content, 'comment': comment})
else:
return redirect('/sign-in')
@login_required
def write_comment(request, id): # 댓글 쓰기
if request.method == 'POST': # 순서도 중요함
my_tweet = TweetModel.objects.get(id=id)
my_comment = TweetComment()
user = request.user
my_comment.author = user
my_comment.tweet = my_tweet
my_comment.comment = request.POST.get('comment', '')
my_comment.save()
return redirect('/tweet/' + str(id)) # str
@login_required
def delete_comment(request, id): # 댓글 삭제하기
my_comment = TweetComment.objects.get(id=id)
my_comment.delete()
return redirect('/tweet/' + str(my_comment.tweet_id)) # str
tweet/urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('tweet/', views.tweet, name='tweet'),
path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),
path('tweet/<int:id>',views.detail_tweet,name='detail-tweet'), # 해당 번호의 트윗과 댓글들 읽어오기
path('tweet/comment/<int:id>',views.write_comment, name='write-comment'), # 해당 id 트윗에 댓글 작성
path('tweet/comment/delete/<int:id>',views.delete_comment, name='delete-comment'), # 해당 댓글 삭제
]
Django의 메서드
- all() : 데이터 전부 가져오기
all_tweet = TweetModel.objects.all().order_by('-created_at') # 최신순으로 정렬
- get() : 하나의 Row만을 가져오기
content = TweetModel.objects.get(id=id)
# TweetModel에서 id가 사용자의 id와 같은 데이터를 가져옴
- filter() : 특정 조건에 맞는 Rows 가져오기
comment = TweetComment.objects.filter(tweet_id=id)
# TweetComment에서 comment의 fk인 tweet_id와 같은 값의 데이터를 가져옴
Django의 외래키 필드명에는 "_id"가 자동으로 추가된다 (재지정 가능)
https://docs.djangoproject.com/ko/4.1/intro/tutorial02/
- exists() : 원하는 조건의 유무에 따라 True/False를 반환해준다
- order_by() : 데이터를 키에 따라 정렬하기 (앞에 -가 붙으면 내림차순)
all_tweet = TweetModel.objects.all().order_by('-created_at') # 최신순으로 정렬
DELETE
my_comment = TweetComment.objects.get(id=id) # 삭제할 Row 객체를 가져온 후
my_comment.delete() # delete() 메서드 호출
UPDATE ?
my_comment = TweetComment.objects.get(pk=1) # id가 1인 TweetComment 객체를 가져온 후
my_comment.content = 'Hi!' # 변경할 필드 수정
my_comment.save() # save() 메서드 호출
Account.objects.create(user_account='ghi', password=5678)
Account(
user_account='ghi',
password=5678,
).save()
'Django' 카테고리의 다른 글
ImportError: cannot import name 'config' from 'decouple' (0) | 2023.04.11 |
---|---|
django 시작하기 (0) | 2023.04.10 |
Django 기초 5주차 2_taggit_Sparta Coding Club (0) | 2023.04.06 |
Django 기초 5주차 1_기능 추가_Sparta Coding Club (0) | 2023.04.05 |
Django 기초 4주차 2_Sparta Coding Club (0) | 2023.04.05 |