생성된 프롬프트가 어제 특정 작업 영역까지는 aigeneration DB에 저장되고 있었는데 언제부턴가 데이터베이스에 저장되지 않는 문제가 발생했다.
@login_required
def create_post(request: HttpRequest) -> HttpResponse:
if request.method == "POST":
form = PostWithAIForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
generated_image_url = request.POST.get('generated_image_url')
generated_prompt = request.POST.get('generated_prompt') # 프롬프트 가져오기
if generated_image_url:
post.image = generated_image_url
if generated_prompt: # 프롬프트 저장
post.generated_prompt = generated_prompt
post.save()
form.save_m2m()
return redirect("index")
@login_required
def generate_image(request):
try:
# ... 기존 코드 ...
# AIGeneration 모델에 저장
ai_generation = AIGeneration.objects.create(
user=request.user,
prompt=prompt,
generated_prompt=generated_prompt, # 생성된 프롬프트 저장
image_url=blob_url
)
# 저장 확인용 로깅 추가
logging.info(f"AIGeneration 저장 완료: id={ai_generation.id}, prompt={prompt}, generated_prompt={generated_prompt}")
return JsonResponse({
"image_url": blob_url,
"generated_prompt": generated_prompt
})
<div id="imagePreview" style="display: none;">
<img id="generatedImage" src="" alt="">
<input type="hidden" name="generated_image_url" id="generatedImageUrl">
<input type="hidden" name="generated_prompt" id="generatedPrompt">
</div>
어제 Blob Storage 업로드 시점을 변경하면서 generated prompt가 POST DB 쪽으로 넘어갔었던 것.
어느 쪽으로 보내면 좋을지 고민했는데 일단은 두 모델에 모두 저장하기로 했다.
이제까지는 모든 갤러리가 @login_required
의 개인 갤러리로만 운영되고 있었다.
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(auto_now_add=True)
image = models.URLField(blank=True, null=True, max_length=1000)
generated_prompt = models.TextField(blank=True, null=True)
is_public = models.BooleanField(default=False) # 추가된 필드
@login_required
def my_gallery(request):
"""사용자의 개인 갤러리"""
posts = Post.objects.filter(user=request.user).order_by('-date_posted')
return render(request, "app/gallery.html", {
"posts": posts,
"gallery_type": "personal"
})
def public_gallery(request):
"""공개 갤러리"""
posts = Post.objects.filter(is_public=True).order_by('-date_posted')
return render(request, "app/gallery.html", {
"posts": posts,
"gallery_type": "public"
})
urlpatterns = [
# ... 기존 URL 패턴들 ...
path("gallery/my/", views.my_gallery, name="my_gallery"),
path("gallery/public/", views.public_gallery, name="public_gallery"),
]
class PostWithAIForm(forms.ModelForm):
prompt = forms.CharField(
widget=forms.Textarea,
required=False,
help_text='AI 이미지 생성을 위한 프롬프트'
)
is_public = forms.BooleanField(
required=False,
initial=False,
help_text='공개 갤러리에 공유하기'
)
class Meta:
model = Post
fields = ["title", "content", "is_public"]
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">
<div class="container">
<div class="navbar-nav">
<a class="nav-link" href="{% url 'index' %}">홈</a>
{% if user.is_authenticated %}
<a class="nav-link" href="{% url 'my_gallery' %}">내 갤러리</a>
{% endif %}
<a class="nav-link" href="{% url 'public_gallery' %}">공개 갤러리</a>
{% if user.is_authenticated %}
<a class="nav-link" href="{% url 'create_post' %}">새 글 작성</a>
{% endif %}
</div>
</div>
</nav>
is_pubic
필드 추가로 공개/비공개 설정 가능@login_required
)공개 갤러리까지 만들었으니 게시물을 검색할 수 있는 기능이 있으면 좋겠다 싶었다.
공개 갤러리와 개인 갤러리 모두에서 사용할 수 있는 검색 기능으로 작업했다.
def public_gallery(request):
"""공개 갤러리"""
search_query = request.GET.get('search', '')
posts = Post.objects.filter(is_public=True)
if search_query:
posts = posts.filter(title__icontains=search_query)
posts = posts.order_by('-date_posted')
return render(request, "app/gallery.html", {
"posts": posts,
"gallery_type": "public",
"search_query": search_query
})
request.GET.get('search', '')
: URL 쿼리 파라미터에서 검색어를 가져옴title__icontains
: 대소문자를 구분하지 않고 제목에 검색어가 포함된 게시물 필터링