Menu
CoddyTech

מפתחות זרים

חלק מהיחידה מודלים וממשק הניהול במסלול ה-Django של Coddy. שיעור 16 מתוך 23.

שניים מהספרים שלך הם מאת ג'יין אוסטן, ושמה מופיע בשניהם: תקן שגיאת הקלדה אחת ותצטרך לתקן אותה פעמיים. שמור כל מחברת פעם אחת, בטבלה משלה, ותן לכל ספר להצביע על המחברת שלו. המצביע הזה הוא ForeignKey. Loan, ספר שהשאלת לחבר, יצביע על הספר שלו:

class Loan(models.Model):
    book = models.ForeignKey(Book, on_delete=models.PROTECT)
    friend = models.CharField(max_length=100)
    lent_on = models.DateField()

העמודה שומרת את המזהה של הספר, book_id; ב-Python, loan.book הוא Book עצמו. הלוואות רבות יכולות להצביע על ספר אחד: קשר רבים-לאחד.

on_delete הוא שדה חובה: הוא קובע מה קורה להלוואות כאשר הספר שלהן נמחק. CASCADE מוחק גם אותן, PROTECT מונע את מחיקת הספר, ו-SET_NULL מרוקן את השדה, ואז נדרש גם null=True.

מודל Author מוכן, וה-__str__ שלו הוא השם, כך ש-{{ book.author }} בתבניות שלך ימשיך לעבוד.

challenge icon

אתגר

בינוני

ב־books/models.py, שנו את Book.author מטקסט לקישור אל Author. כשמוחקים מחבר, גם הספרים שלו נמחקים.

לחצו על "שחק" ואז לחצו על Dune: בעמוד שלו עדיין כתוב מאת Frank Herbert.

נסו בעצמכם

from django.db import models


class Author(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        ordering = ["name"]

    def __str__(self):
        return self.name


class Book(models.Model):
    class Genre(models.TextChoices):
        FICTION = "fiction", "Fiction"
        SCIFI = "scifi", "Science fiction"
        MYSTERY = "mystery", "Mystery"
        HISTORY = "history", "History"

    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    year = models.IntegerField()
    price = models.DecimalField(max_digits=6, decimal_places=2)
    is_read = models.BooleanField(default=False)
    finished = models.DateField(null=True, blank=True)
    summary = models.TextField(blank=True)
    genre = models.CharField(max_length=20, choices=Genre, default=Genre.FICTION)

    class Meta:
        ordering = ["title"]

    def __str__(self):
        return f"{self.title} by {self.author}"

כל השיעורים ביחידה מודלים וממשק הניהול

תרגלו בעצמכם: Django אונליין