【发布时间】:2020-05-02 21:53:07
【问题描述】:
我正在尝试建立一个网站,用户可以添加他们正在学习的课程。我想知道我应该如何添加 ManyToMany 关系。这样我们就可以根据课程代码或讲师或任何领域获得课程中的所有用户。我们还可以获取用户注册的课程。目前,我的数据库结构是:
class Course(models.Model):
course_code = models.CharField(max_length=20)
course_university = models.CharField(max_length=100)
course_instructor = models.CharField(max_length=100)
course_year = models.IntegerField(('year'), validators=[MinValueValidator(1984), max_value_current_year])
def __str__(self):
return self.course_code
和我的用户模型:
class Profile(AbstractUser):
bio = models.TextField()
image = models.ImageField(default='defaults/user/default_u_i.png',
courses = models.ManyToManyField('home.Course',related_name='courses')
def __str__(self):
return self.username
我想知道 ManyToMany 关系应该在用户模型还是课程模型中?还是会产生任何影响?
编辑:为了向帖子对象添加课程,我现在正在使用此视图,但它似乎不起作用:
@login_required
def course_add(request):
if request.method == "POST":
form = CourseForm(request.POST or none)
if form.is_valid():
course = form.save()
request.user.add(course)
else:
form = CourseForm
context = {
'form':form
}
return render(request,'home/courses/course_add.html', context)
【问题讨论】:
-
不会有太大区别。 Django 将创建一个额外的表,其中包含模型的两个外键。剩下的只是 Django 在模型中添加相关的管理器,让 ORM 查询更方便。
-
所以我目前的模型是正确的?我可以同时检索用户课程和课程中的用户吗?
-
那么
related_name需要更改,例如profiles。 -
在这里链接this question。他们是相关的,解决了我作为一对夫妇的问题。
标签: python django django-models django-forms