from django.db import models
from users.models import TimeStampedModel
class Posting(TimeStampedModel) :
email = models.ForeignKey('users.User' ,on_delete=models.CASCADE)
content = models.TextField(max_length=500, null=True, blank=True)
class Meta :
db_table = 'postings'
class Image(TimeStampedModel) :
img_url = models.CharField(max_length=500, null=True, blank=True)
posting = models.ForeignKey('Posting', on_delete=models.CASCADE)
class Meta :
db_table = 'images'
하나의 포스트에 여러개의 이미지가 있을 수 있으므로, 이미지 테이블을 분리
이미지 테이블은 당연히 포스트의 id를 참조
class PostingView(View) :
@login_decorator
def post(self, request) :
#Posting : content
#Image : img_url
try :
data = json.loads(request.body)
email_id = request.user.id
img_url = data.get('img_url', None)
content = data.get('content', None)
posting = Posting.objects.create(
email_id = email_id,
content = content
)
if img_url :
for imgs in img_url :
Image.objects.create(
posting_id = posting.id,
img_url = imgs
)
except KeyError :
return JsonResponse({'message':'KEY_ERROR'}, status=401)
except json.decoder.JSONDecodeError :
return JsonResponse({'message':'값을 하나라도 입력하세요'}, status=401)
return JsonResponse({'message':'Success'}, status=200)
우선 데코레이터에서 선언한 request.user를 불러와서 email_id 변수에 저장
그리고 사진만 올리거나, 글만 쓰거나 등의 경우가 있기 때문에 데이터가 없으면 None
포스팅을 먼저 등록해준 다음, 그에 대한 이미지 파일을 등록해야 하기 때문에
Posting 객체생성 후, Image 객체 생성
이미지는 여러개가 있을 수 있으므로, 리스트로 받아서 for문을 돌린 다음
개수만큼 행데이터로 저장
@login_decorator
def get(self, request) :
#등록된 모든 게시물 / 등록한 사람, 등록한 시간, 게시물url, 게시물 내용
try :
postings = Posting.objects.all()
result = []
for posting in postings :
img_url = posting.image_set.all()
url_list = []
for urls in img_url :
url_list.append({
'url_list' : urls.img_url
})
result.append(
{
'등록한 사람' : User.objects.get(id=posting.email_id).email,
'등록한 시간' : posting.created_at.strftime("%Y-%m-%d %H:%M:%S"),
'게시물 url' : url_list,
'게시물 내용' : posting.content
}
)
return JsonResponse({'message':result}, status=201)
except AttributeError as msg :
return JsonResponse({'message':msg}, stauts=400)
except TypeError as msg :
return JsonResponse({'message':msg}, stauts=400)
Posting의 id를 Image가 참조하기 때문에 역참조릴 이용하여 이미지를 가져옴
시간의 경우 strftime()을 이용해 형변환