[英]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.