لكل ملاحظة مالك
جزء من قسم المستخدمون والحسابات في رحلة 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 لإضافة الحقل الجديد.
التحدي
متوسطاجعل لكل ملاحظة مالكًا.
- في
notes/models.py، أضف حقلownerإلىNote: مفتاحًا خارجيًا إلىsettings.AUTH_USER_MODELمعon_delete=models.CASCADEوrelated_name="notes". استوردsettingsمنdjango.conf. - في
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