在Django中使用复选框和查询数据库
我的目标是创建一个页面,列出数据库中所有可用的课程,并让用户选择他们想成为导师的课程 我有一个在Django中使用复选框和查询数据库,django,forms,Django,Forms,我的目标是创建一个页面,列出数据库中所有可用的课程,并让用户选择他们想成为导师的课程 我有一个CustomUser模型,一个courses模型,最后还有一个tutorteachesorse模型,它将user和courses作为外键 # model.py from django.contrib.auth.models import AbstractUser class CustomUser(AbstractUser): is_tutee = models.BooleanField(defa
CustomUser
模型,一个courses
模型,最后还有一个tutorteachesorse
模型,它将user
和courses
作为外键
# model.py
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
is_tutee = models.BooleanField(default=False)
is_tutor = models.BooleanField(default=False)
courses = models.ManyToManyField(Courses)
class Courses(models.Model):
course_name = models.CharField(max_length=100, null = False)
course_number = models.CharField(max_length=100, null = False)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
course_description = models.CharField(max_length=1000, blank=True)
#tutor = models.ManyToManyField(CustomUser) #moved m2m relationship to user model
objects = models.Manager()
def __str__(self):
return self.course_name
在这里,用户可以选择/取消选择他们想辅导/不想辅导的课程
# edit_tutored_courses.html
<table style="width:50%">
<tr>
<th>Course Name</th>
</tr>
<form method="POST" action="">
{% csrf_token %}
{% for is_tutor in form %}
{% for course in is_tutor %}
<tr>
<td>{{ course }}</td>
<td>{{ user }}</td>
</tr>
{% endfor %}
{% endfor %}
</table>
<input type="submit" value="Save Changes"/>
</form>
\edit\u tutored\u courses.html
课程名称
{%csrf_令牌%}
{%for is_tutor的格式为%}
{is_tutor%}中的课程为%
{{course}}
{{user}}
{%endfor%}
{%endfor%}
我可以在我的页面上显示课程,但我不知道如何更改数据库。我希望复选框意味着,一旦我单击“提交”,表
tutorteachesources
就会用选中的课程填充该用户,如果我取消选中复选框,则意味着它会删除现有的课程。(这意味着我还需要让页面自动选中数据库中存在的复选框。我如何做到这一切?那么,有什么问题吗?使用常规的表单
(而不是模型表单
)使用和复选框SelectMultiple
小部件。您需要更改模板以显示该字段,而不是在课程中循环。然后在您的视图中,字段清理数据的值将是课程列表,因此您可以创建您的关系。请注意,您可以刚刚定义ManyToManyField
在Course
上转到CustomUser
而不是创建单独的模型。如果form.is\u valid():user.courses.set(form.cleaned\u data['courses']
是分配所选课程所需的全部操作。向模型添加一个u str\uu()方法。这就是用于打印对象的方法。
# views.py
def edit_tutored_courses(request):
user = request.user
if request.method == 'POST':
form = EditTutoredCoursesForm(request.POST)
if form.is_valid():
user.courses.set(form.cleaned_data['courses'])
user = form.save(commit=True)
messages.success(request, 'Success!')
return redirect(reverse('view_profile'))
else:
form = EditTutoredCoursesForm()
context = {
'form' : form,
}
return render(request, 'edit_tutored_courses.html', context)
# edit_tutored_courses.html
<table style="width:50%">
<tr>
<th>Course Name</th>
</tr>
<form method="POST" action="">
{% csrf_token %}
{% for is_tutor in form %}
{% for course in is_tutor %}
<tr>
<td>{{ course }}</td>
<td>{{ user }}</td>
</tr>
{% endfor %}
{% endfor %}
</table>
<input type="submit" value="Save Changes"/>
</form>