簡體   English   中英

如何在 Django 中連接多個模型

[英]How can I connect multiple models in Django

我是 Django 的初學者,想在 Django 模型中創建一個系統,用戶可以上傳帶有標題和不同章節的課程,這些章節都可以包含多個視頻。 如這張圖片所示

我想過創建三個模型

1. 課程

帶有課程名稱

2. 章節

其中有不同的視頻

3. 視頻

這里是帶有視頻標題的視頻

但是我不知道如何在這三個模型之間建立聯系,以便在一門課程中可以有多個章節,在一個章節中可以有多個視頻。

這些是我的第一個模型(我剛剛快速創建了它們):

 def user_directory_path(instance, filename): # file will be uploaded to MEDIA_ROOT/user_<id>/<filename> return 'user_{0}/{1}'.format(instance.user.id, filename) class video(models.Model): title = models.CharField(max_length=100) video = models.FileField(upload_to=user_directory_path) class course(models.Model): title = models.CharField(max_length=100) class chapter(models.Model): pass

我應該如何調整模型並創建連接以完成我所追求的系統?

您可以使用以下模型作為基礎。 通常, ForeignKey會創建多對一的關系(一個用戶可以擁有多門課程,但一門課程不能被多個用戶擁有)。 並且ManyToManyField創建了ManyToManyField關系(一個學生可以注冊多門課程,一個課程也可以有多個學生注冊)。 請注意,related_name 屬性是您從類指向的相關對象訪問實例(包含關系字段的類的)實例時如何引用它們(示例: https : //docs.djangoproject.com/en/3.1/主題/數據庫/查詢/#backwards-related-objects )。

from django.contrib.auth.models import User
from django.db import models

    
class Subject(models.Model):
    title = models.CharField(max_length=200)
    
class Course(models.Model):
    owner = models.ForeignKey(User, related_name='courses_created', on_delete=models.CASCADE)
    subject = models.ForeignKey(Subject, related_name='courses', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    students = models.ManyToManyField(User, related_name='courses_joined', blank=True)

class Chapter(models.Model):
    course = models.ForeignKey(Course, related_name='chapters', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    
class VideoItem(models.Model):
    title = models.CharField(max_length=250)
    video = models.FileField(upload_to=user_directory_path)
    chapter = models.ForeignKey(Chapter, related_name='videos', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

這是一份關於你可以做什么的草稿:
請注意,類名在 CamelCase 中**

 class Course(models.Model): title = models.CharField(max_length=100) class Chapter(models.Model): course = models.ForeignKey(Course, on_delete=models.CASCADE) class Video(models.Model): title = models.CharField(max_length=100) video = models.FileField(upload_to=user_directory_path) chapter = models.ForeignKey('Chapter', on_delete=models.CASCADE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM