我决定开始在Django中创建自己的LMS,以便在我的高级Python课程中完成最终项目,不幸的是,我已经在进步方面达到了障碍。
我有两个模特。
我的问题是,如何将个人资料模型链接到多个课程?
到目前为止,这是我的代码:
class Course(models.Model):
name = models.CharField(max_length=20)
members = models.ManyToManyField(User, related_name=("Members"))
def __str__(self):
return str(self.name)
class Profile(models.Model):
role = models.CharField(max_length=1, choices=roles)
user = models.OneToOneField(User, on_delete=models.CASCADE)
courses = models.ForeignKey(Course)
USERNAME_FIELD = 'user'
REQUIRED_FIELDS = ['user', 'password', 'role']
def __str__(self):
return str(self.user)
@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save
答案 0 :(得分:0)
外键关系允许此模型的多个实例与其他模型的单个实例相关联,即
class Profile(models.Model):
...
courses = models.ForeignKey(Course)
只允许一个Course
与给定的Profile
相关联(但多个Profile
可以与单个Course
相关联。您可能会将其视为父母>子关系,其中Course
是父项,Profile
是子项。
如果您需要关联多个Course
以与Profile
关联(并且仍然可以与Profile
关联多个Course
,那么您应使用ManyToMany
关系,例如:
class Profile(models.Model):
...
courses = models.ManyToMany(Course)
这有效地创建了一个连接双方的第三个隐藏表(称为through
表):
这是通过表格的示例。请注意,您不必手动创建此项,因为通常没有模型(它是隐式的),数据库表由Django自动生成:
class ProfileCourse(models.Model):
profile = models.ForeignKey(Profile)
course = models.ForeignKey(Profile)