05. 다른 앱 설정

조재훈·2022년 7월 17일
0

Clone_Airbnb

목록 보기
12/31
post-thumbnail

1) reviews 앱

숙소에 대한 후기 기능을 추가할 것이다.

  1. Settings.py에 앱을 추가해준다.
PROJECT_APPS = ["reviews.apps.ReviewsConfig",]

  1. models.py를 작성한다.
    review - models.py
from core import models as models_core

class Review(models_core.TimeStampedModel):

    """Review Model Definition"""
    
    preview = models.TextField()
    cleanliness = models.IntegerField()
    accuracy = models.IntegerField()
    communication = models.IntegerField()
    location = models.IntegerField()
    check_in = models.IntegerField()
    value = models.IntegerField()
    user = models.ForeignKey("users.User", on_delete=models.CASCADE)
    room = models.ForeignKey("rooms.Room", on_delete=models.CASCADE)

  1. admin.py를 설정한다
    reviews - admin.py
from django.contrib import admin
from . import models

@admin.register(models.Review)
class ReviewAdmin(admin.ModelAdmin):

    """Review Admin Definition"""

    pass

  1. migration

    admin 패널

  2. __str__ 메소드 추가
    Review가 단순히 Object 1로 뜬다.

review - models.py - Review

def __str__(self):
    self.review


ForeignKey에 해당하는 필드를 입력하면 이를 타고 들어가 해당 필드와 연과된 다른 정보도 불러올 수 있다.

return self.room.country


타고 들어간 필드에 또 다른 ForeignKey가 있다면 또 타고 들어갈 수 있다.

최종은 아래와 같이 한다.

return f"{self.review} - {self.room}"


2) reservations 앱

  1. settings.py에 등록
> PROJECT_APPS = ["reservations.apps.ReservationsConfig",]

  1. models.py 수정
from django.db import models
from core import models as models_core

class Reservation(models_core.TimeStampedModel):
    """Reservation Model Definition"""

    STATUS_PENDING = "pending"
    STATUS_CONFIRMED = "confirmed"
    STATUS_CANCELED = "canceled"

    STATUS_CHOICES = (
        (STATUS_PENDING, "Pending"),
        (STATUS_CONFIRMED, "Confirmed"),
        (STATUS_CANCELED, "Canceled"),
    )
    status = models.CharField(max_length=12, choices=STATUS_CHOICES, default=STATUS_PENDING)
    check_in = models.DateField()
    check_out = models.DateField()
    guest = models.ForeignKey("users.User", on_delete=models.CASCADE)
    room = models.ForeignKey("rooms.Room", on_delete=models.CASCADE)

  1. admin.py 수정
from django.contrib import admins
from . import models

@admin.register(models.Reservation)
class ReservationAdmin(admin.ModelAdmin):

    """Reservation Admin Definition"""
    
    pass
  1. migration

3) lists 앱

config - settings.py
1. lists 앱 설치

PROJECT_APPS = ["lists.apps.ListsConfig"]
  1. models.py 수정
from django.db import models
from core import models as models_core

class List(models_core.TimeStampedModel):

    """List Model Definition"""
    
    name = models.CharField(max_length=80)
    user = models.ForeignKey("users.User", on_delete=models.CASCADE)
    rooms = models.ManyToManyField("rooms.Room", blank-True)
    
    def __str__(self):
        return self.name
  1. admin.py
from django.contrib import admin
from . import models

@admin.register(models.List)
class ListAdmin(admin.ModelAdmin):
    
    """List Admin Definition"""
    
    pass
  1. migration

4) conversations 앱

  1. settings.py
    config - settings.py
PROJECT_APPS = ['conversations.apps.ConversationsConfig"]
  1. models.py
    conversations - models.py
fromm djnago.db import models
from core import models as models_core

class Conversation(models_core.TimeStampedModel):

    """Conversation Model Definition"""
    
    pasrticipants = models.ManyToManyField("users.User", blank=True)
    
    def __str__(self):
        return self.created

Message 클래스 추가

class Message(models_core.TimeStampedModel):

    "Message Model Definition"""
    
    message = models.TextField()
    user = models.ForeignKey("users.User", on_delete=models.CASCADE)
    conversation = models.ForeignKey("Conversation", on_delete=models.CASCADE)
    
    def __str__(self):
    return f"{self.user} says: {self.text}"
  1. admin.py
from django.contrib import admin
from . import models

@admin.register(models.Message)
class MessageAdmin(admin.ModelAdmin):

    """Message Admin Definition"""
    
    pass


@admin.register(models.Conversation)
class ConversationAdmin(admin.ModelAdmin):

    """Conversation Admin Definition"""
    
    pass
  1. migration

근데 Conversation을 생성하려니 에러가 났다.

아마 반환값이 str이 아니라서 그런것 같다.
Conversation 클래스의 반환값을 str로 변환해주자

    def __str__(self):
        return str(self.created)

됐당

profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글