Mỗi ghi chú đều có chủ sở hữu
Thuộc phần Người dùng và tài khoản trong hành trình Django của Coddy. Bài học 8 trên 16.
Mọi người dùng đã đăng nhập đều dùng chung một tập ghi chú. Để phân biệt các ghi chú, mỗi ghi chú cần lưu lại người viết: một ForeignKey, giống như khóa liên kết từ một cuốn sách đến tác giả của cuốn sách đó.
Để liên kết với người dùng, đừng nhập User. Hãy trỏ ForeignKey đến cài đặt settings.AUTH_USER_MODEL (sau from django.conf import settings), cài đặt này chỉ định mô hình người dùng, ở đây là "auth.User". Nhờ vậy, code vẫn chạy tốt trong một dự án có mô hình người dùng riêng.
Người viết ghi chú không bao giờ là trường của biểu mẫu: nếu người dùng có thể chọn trường này, họ có thể viết ghi chú dưới tên người khác. View sẽ điền trường này. Như trong phần Biểu mẫu, form.save(commit=False) tạo đối tượng mà chưa lưu, để view có thể đặt một trường mà biểu mẫu không có:
order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()Nút Chạy thực hiện makemigrations và migrate cho trường mới.
Thử thách
Trung bìnhGán chủ sở hữu cho mỗi ghi chú.
- Trong
notes/models.py, thêm trườngownervàoNote: mộtForeignKeytrỏ đếnsettings.AUTH_USER_MODEL, vớion_delete=models.CASCADEvàrelated_name="notes". Nhậpsettingstừdjango.conf. - Trong
note_create(views.py), thaynote = form.save(). Tạo ghi chú nhưng chưa lưu, đặt chủ sở hữu là người dùng đã đăng nhập, rồi lưu ghi chú.
Viết ghi chú bằng tài khoản ada, rồi mở thẻ Data: chủ sở hữu của ghi chú là 1.
Tự làm thử
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
Tất cả bài học trong Người dùng và tài khoản
3Dữ liệu của riêng bạn
Mỗi ghi chú đều có chủ sở hữuChỉ ghi chú của bạnTự luyện tập: Playground Django