为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Django 中连接多个模型

如何在 Django 中连接多个模型

海绵宝宝撒 2023-07-11 15:27:08
我是 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我应该如何调整模型并创建连接来完成我想要的系统?
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您可以使用以下模型作为基础。通常,ForeignKey创建多对一关系(一个用户可以拥有多个课程,但一门课程不能由多个用户拥有)。并ManyToManyField创建多对多的关系(一个学生可以注册多门课程,一门课程可以有多个学生注册)。请注意, related_name 属性是您从类指向的相关对象访问实例(包含关系字段的类的实例)时引用它们的方式。


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)


查看完整回答
反对 回复 2023-07-11
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

以下是关于您可以执行的操作的草稿:

请注意,类名称采用 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)


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信