我有两个模型:个人档案和课程。 配置文件存储用户信息。课程有标题,描述和日期。 用户可以使用链接注册课程。我的目标是列出每个课程的用户列表。
我尝试使用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)
我希望课程中有用户列表。
答案 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”)来描述关系。