메모에는 소유자가 있어요
Coddy Django 여정의 사용자와 계정 섹션에 포함된 레슨. 16개 중 8번째.
로그인한 모든 사용자가 하나의 메모 더미를 함께 사용합니다. 메모를 구분하려면 각 메모에 작성자가 누구인지 기록해야 합니다. 책과 저자를 연결하는 것과 같은 ForeignKey를 사용합니다.
사용자와 연결하려면 User를 가져오지 마세요. 사용자 모델의 이름을 지정하는 설정 settings.AUTH_USER_MODEL(앞서 from django.conf import settings를 실행한 뒤)을 ForeignKey가 가리키도록 하세요. 여기서는 "auth.User"입니다. 그러면 자체 사용자 모델을 사용하는 프로젝트에서도 이 코드를 그대로 사용할 수 있습니다.
메모를 누가 작성했는지는 폼 필드가 될 수 없습니다. 사용자가 작성자를 선택할 수 있다면 다른 사람인 척 글을 쓸 수 있기 때문입니다. 뷰에서 이 값을 채웁니다. Forms 절에서처럼 form.save(commit=False)는 저장하지 않고 객체를 만들기 때문에, 뷰에서 폼에 없는 필드를 설정할 수 있습니다.
order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()새 필드에 대해 makemigrations와 migrate를 실행합니다.
챌린지
중급각 메모에 소유자를 지정하세요.
notes/models.py에서Note에owner필드를 추가하세요.settings.AUTH_USER_MODEL을 참조하는ForeignKey이며,on_delete=models.CASCADE와related_name="notes"를 사용합니다.django.conf에서settings를 가져오세요.note_create(views.py)에서note = form.save()를 대체하세요. 메모를 저장하지 않고 생성한 다음, 로그인한 사용자로 소유자를 설정한 후 저장하세요.
ada로 메모를 작성한 다음 Data 탭을 여세요. 소유자는 1입니다.
직접 해보기
from django.db import models
class Note(models.Model):
title = models.CharField(max_length=100)
body = models.TextField(blank=True)
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["-created"]
def __str__(self):
return self.title
사용자와 계정의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드