[Westagram]:投稿の登録


課題



コード#コード#


models.py

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'
1つの文章に複数の画像があるため、画像テーブルを分離します.
画像テーブルはもちろん文章のidを参照します

views.py

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
ロケーションを登録してから、イメージファイルを登録する必要があります.
賭けオブジェクトを作成した後、画像オブジェクトを作成します.
画像は複数あり得るので、リストとして受信し、ドアに切り替えることができる.
行数でデータを格納する
 @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を参照しているので、逆参照で画像をインポート
strftime()を使用して時間を変換する