Menu
CoddyTech

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.

challenge icon

Thử thách

Trung bình

Gán chủ sở hữu cho mỗi ghi chú.

  1. Trong notes/models.py, thêm trường owner vào Note: một ForeignKey trỏ đến settings.AUTH_USER_MODEL, với on_delete=models.CASCADE và related_name="notes". Nhập settings từ django.conf.
  2. Trong note_create (views.py), thay note = 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

Tự luyện tập: Playground Django