Menu
CoddyTech

لكل ملاحظة مالك

جزء من قسم المستخدمون والحسابات في رحلة Django على Coddy. الدرس 8 من 16.

يتشارك كل مستخدم سجّل دخوله كومةً واحدة من الملاحظات. وللتمييز بينها، يجب أن تسجّل كل ملاحظة مَن كتبها: حقل ForeignKey، مثل الحقل الذي يربط كتابًا بمؤلفه.

للربط بمستخدم، لا تستورد User. وجّه ForeignKey إلى الإعداد settings.AUTH_USER_MODEL (بعد from django.conf import settings)، الذي يحدّد نموذج المستخدم، وهو "auth.User" هنا. وهكذا يظل الكود مناسبًا لمشروع يستخدم نموذج مستخدم خاصًا به.

لا يكون كاتب الملاحظة أبدًا حقلًا في النموذج: فالمستخدم الذي يستطيع اختياره يمكنه الكتابة باسم شخص آخر. تتولى الواجهة ملء هذا الحقل. وكما في قسم النماذج، تنشئ form.save(commit=False) الكائن من دون حفظه، ليتمكن العرض من تعيين حقل غير موجود في النموذج:

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

شغّل makemigrations وmigrate لإضافة الحقل الجديد.

challenge icon

التحدي

متوسط

اجعل لكل ملاحظة مالكًا.

  1. في notes/models.py، أضف حقل owner إلى Note: مفتاحًا خارجيًا إلى settings.AUTH_USER_MODEL مع on_delete=models.CASCADE وrelated_name="notes". استورد settings من django.conf.
  2. في note_create (views.py)، استبدل note = form.save(). أنشئ الملاحظة من دون حفظها، واجعل مالكها هو المستخدم الذي سجّل دخوله، ثم احفظها.

اكتب ملاحظة باسم ada، ثم افتح علامة التبويب «البيانات»: مالكها هو 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

جميع دروس المستخدمون والحسابات

تدرّب بنفسك: Playground لـ Django