如何在 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


我应该如何调整模型并创建连接来完成我想要的系统?


海绵宝宝撒
浏览 161回答 2
2回答

胡说叔叔

您可以使用以下模型作为基础。通常,ForeignKey创建多对一关系(一个用户可以拥有多个课程,但一门课程不能由多个用户拥有)。并ManyToManyField创建多对多的关系(一个学生可以注册多门课程,一门课程可以有多个学生注册)。请注意, related_name 属性是您从类指向的相关对象访问实例(包含关系字段的类的实例)时引用它们的方式。from django.contrib.auth.models import Userfrom 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):&nbsp; &nbsp; title = models.CharField(max_length=100)class Chapter(models.Model):&nbsp; &nbsp; course = models.ForeignKey(Course, on_delete=models.CASCADE)class Video(models.Model):&nbsp; &nbsp; title = models.CharField(max_length=100)&nbsp; &nbsp; video = models.FileField(upload_to=user_directory_path)&nbsp; &nbsp; chapter = models.ForeignKey('Chapter', on_delete=models.CASCADE)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python