-
Web Dev Bootcamp TIL Day-31 (Django CRUD)TIL 2022. 5. 30. 15:46
CREATE
- when creating a tweet model, we must keep in mind the one-many relationship between user-tweet
- in our sample model, we set author = usermodel FK ---> this will save the usermodel's object ID inside the author field of the tweet model
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)
tweets inside DB: user w/ objectID=18 has posted 3 tweets <form> tag and view for posting / saving a tweet to DB
READ
- we can pass all the tweets that we've so far stored in our local DB to the client side in reverse chronological order
if request.method == 'GET': user = request.user.is_authenticated if user: #최신순으로 트윗들 모두 가져오기 all_tweets = TweetModel.objects.all().order_by('-created_at') return render(request, 'tweet/home.html', {'tweets': all_tweets})
- using Jinja2 syntax, we can create a dynamic template where a delete button will be displayed only on tweets whose author == currently logged in user
{% if tw.author == user %} <div style="text-align: right"> <a href="/tweet/delete/{{ tw.id }}"> <span class="badge rounded-pill bg-danger">삭제</span> </a> </div> {% endif %} <div style="text-align: right"> <a href="#"> <span class="badge rounded-pill bg-success">보기</span> </a> </div>
- we can access the username of each tweet's author by utilizing the FK of the tweet model
- tw.author ---> usermodel objectID
- tw.author.username ----> username of that usermodel object
{{ tw.author.username }}
DELETE
- for deleting a tweet, we want the tweet to be deletable only by its author
- we can use a control flow statement in jinja to create a dynamic template for this feature
- we will then send to views the objectID of the tweet model we want to delete by creating a dynamic URL
{% if tw.author == user %} <div style="text-align: right"> <a href="/tweet/delete/{{ tw.id }}"> <span class="badge rounded-pill bg-danger">삭제</span> </a> </div> {% endif %}
path('tweet/delete/<int:id>', views.delete_tweet, name='delete-tweet'),
@login_required def delete_tweet(request, id): my_tweet = TweetModel.objects.get(id=id) my_tweet.delete() return redirect('/tweet')
'TIL' 카테고리의 다른 글
Web Dev Bootcamp TIL Day-33 (Django proj. Start & Recommendation Systems ) (0) 2022.06.04 Web Dev Bootcamp TIL Day-32(Django ORM) (0) 2022.05.31 Web Dev Bootcamp TIL Day-30(Django Cont: user authorization) (0) 2022.05.27 Web Dev Bootcamp TIL Day-28(Django Start) (0) 2022.05.26 Web Dev Bootcamp TIL Day-27(Machine Learning Proj. KPT) (0) 2022.05.25