Menu
CoddyTech

Bir Notun Sahibi Vardır

Coddy'nin Django Journey'sinin Kullanıcılar ve Hesaplar bölümünün bir parçası. Ders 8 / 16.

Oturum açmış tüm kullanıcılar aynı not yığınını paylaşır. Notları birbirinden ayırmak için her notun kimin tarafından yazıldığını kaydetmesi gerekir: tıpkı bir kitabı yazarına bağlayan ForeignKey gibi.

Bir kullanıcıya bağlamak için User öğesini içe aktarmayın. ForeignKey öğesini kullanıcı modelini belirten settings.AUTH_USER_MODEL ayarına yönlendirin (from django.conf import settings sonrasında); buradaki değer "auth.User" olur. Böylece kod, kendi kullanıcı modeli olan bir projede de sorunsuz çalışır.

Bir notu kimin yazdığı hiçbir zaman form alanı olmaz: bu alanı seçebilen bir kullanıcı, başka biriymiş gibi not yazabilir. Görünüm bu alanı doldurur. Forms bölümündeki gibi, form.save(commit=False) nesneyi kaydetmeden oluşturur; böylece görünüm, formda bulunmayan bir alanı ayarlayabilir:

order = form.save(commit=False)
order.total = order.quantity * order.unit_price
order.save()

Yeni alan için makemigrations ve migrate komutlarını çalıştırın.

challenge icon

Görev

Orta

Her nota bir sahip ata.

  1. notes/models.py dosyasında Note modeline bir owner alanı ekle: settings.AUTH_USER_MODEL için bir ForeignKey; on_delete=models.CASCADE ve related_name="notes" kullan. settings öğesini django.conf modülünden içe aktar.
  2. note_create (views.py) içinde note = form.save() satırını değiştir. Notu kaydetmeden oluştur, sahibini oturum açmış kullanıcı olarak ayarla, ardından kaydet.

ada olarak bir not yaz, ardından Data sekmesini aç: sahibi 1.

Kendin dene

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

Kullanıcılar ve Hesaplar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground