链接两个模型

时间:2019-04-01 21:57:07

标签: python django django-models

我有两个模型:个人档案和课程。 配置文件存储用户信息。课程有标题,描述和日期。 用户可以使用链接注册课程。我的目标是列出每个课程的用户列表。

我尝试使用ForeignKey,但只有在用户注册后,我才需要将用户添加到列表中。

class Course(models.Model):
course_title = models.CharField(max_length=200)
course_description = models.TextField()
course_published = models.DateTimeField("date published", default = datetime.now())
course_users = []
def __str__(self):
    return self.course_title

def course_signup(request):
# here i guess i need to somehow add the user to the list
Course.course_users.append(Profile.id)
return redirect("main:homepage")

个人资料代码:

class Profile (models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
image=models.ImageField(default='default.jpg',upload_to='profile_pics')
def __str__(self):
    return f'{self.user.username} Profile'

def save(self, *args, **kwargs):
    super(Profile,self).save(*args,**kwargs)
    img = Image.open(self.image.path)

    if img.height > 300 or img.width >300:
        output_size = (300,300)
        img.thumbnail(output_size)
        img.save(self.image.path)

我希望课程中有用户列表。

1 个答案:

答案 0 :(得分:1)

那只是一个多对多(m2m)关系。您可以使用Django的ManyToMany()部分,也可以创建自己的关系,如下所示:

class ProfileCourse(models.Model):
    profile = models.ForeignKey(Profile)
    course = models.ForeignKey(Course)

因此,您可以使用以下课程注册个人资料:

def course_signup(request):
     profile = [snip....]
     course = [snip...]
     ProfileCourse(profile=profile, course=course).save()

管理自己的m2m关系的真正优势之一是可以向该关系添加其他信息。在这种情况下,您可以添加“ final_grade”。

另一件事... m2m关系通常以关系的两个方面来简单命名(例如ProfileCourse), 除非存在另一个好词(例如“ Enrollment”)来描述关系。