Folevel
[TIL - 24. 08. 26] Django 팀과제 본문
오늘은 해시태그 기능을 구현했다. 진행하다가 막히는 부분이 너무 많아서 manytomanyfield에 대해 다시 공부하고 진행했다. 몇시간 동안이나 고민했던 문제가 강의 듣고 진행하니 너무 쉽게 풀렸다. 기본을 간과하고 그냥 머리 박다가는 내 머리만 깨진다는 교훈을 얻었다.
@login_required
def hashtag(request, hash_pk):
hashtag = get_object_or_404(Hashtag, pk=hash_pk)
products = Article.objects.filter(hashtags=hashtag).order_by('-pk')
context = {
"hashtag": hashtag,
"products": products,
}
return render(request, 'products/hashtag.html', context)
@login_required
def update(request, pk):
product = get_object_or_404(Article, pk=pk)
product.title = request.POST.get("title")
product.content = request.POST.get("content")
product.save()
if request.method == "POST":
form = CreatedForm(request.POST, request.FILES, instance=product)
if form.is_valid():
article = form.save(commit=False)
article.author = request.user
article.save()
# 기존 해시태그를 지우고 새로 추가
article.hashtags.clear()
hashtags_input = form.cleaned_data.get('hashtags', '')
hashtags = set(word for word in hashtags_input.split() if word.startswith('#'))
for hashtag in hashtags:
cleaned_hashtag = hashtag.strip("#")
if cleaned_hashtag:
hashtag_obj, created = Hashtag.objects.get_or_create(content=cleaned_hashtag)
article.hashtags.add(hashtag_obj)
return redirect("products:product_detail", article.pk)
else:
form = CreatedForm(instance=product)
context = {"form": form, "product": product}
return render(request, "products/edit.html", context)
@login_required
def create(request):
if request.method == "POST":
form = CreatedForm(request.POST, request.FILES)
if form.is_valid():
article = form.save(commit=False)
article.author = request.user
article.save()
# 해시태그 파싱 및 저장
hashtags_input = form.cleaned_data.get('hashtags', '')
hashtags = set(word for word in hashtags_input.split() if word.startswith('#'))
for hashtag in hashtags:
cleaned_hashtag = hashtag.strip("#")
if cleaned_hashtag:
hashtag_obj, created = Hashtag.objects.get_or_create(content=cleaned_hashtag)
article.hashtags.add(hashtag_obj)
article.save()
return redirect("products:product_detail", article.pk)
else:
form = CreatedForm()
context = {"form": form}
return render(request, "products/create.html", context)
class Hashtag(models.Model):
content = models.CharField(max_length=30, unique=True)
# articles = models.ManyToManyField('Article', related_name='hashtag_articles')
def __str__(self):
return self.content
class Article(models.Model):
title = models.CharField(max_length=20)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
image = models.ImageField(upload_to="images/", blank=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="articles")
like_users = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name="like_articles")
hashtags = models.ManyToManyField(Hashtag, blank=True, related_name='article_hashtags')
def __str__(self):
return self.title
'I Learned > Today I Learned' 카테고리의 다른 글
[TIL - 24. 08. 28.] Django 팀 과제 마무리 및 발표 (0) | 2024.08.28 |
---|---|
[TIL - 24. 08. 27] Djago 팀과제 (0) | 2024.08.27 |
[TIL - 24. 08. 23] Django 팀과제 오늘자 진행 회고 (0) | 2024.08.23 |
[TIL - 24. 08. 22] Django 팀과제 (0) | 2024.08.22 |
[TIL - 24. 08. 21.] GITHUB 사용법 및 Django 팀 과제 (0) | 2024.08.21 |