Python Django多对多字段未正确保存在数据库中
当我试图在django保存多对多字段时。它只保存一个项目,即使我从模板中选择了两个项目 My views.py看起来像这样Python Django多对多字段未正确保存在数据库中,python,django,Python,Django,当我试图在django保存多对多字段时。它只保存一个项目,即使我从模板中选择了两个项目 My views.py看起来像这样 @login_required() def create_class(request): tea_user = request.user.username validate = teacher_validation(tea_user) if validate: if request.method == 'POST':
@login_required()
def create_class(request):
tea_user = request.user.username
validate = teacher_validation(tea_user)
if validate:
if request.method == 'POST':
Link = request.POST.get('link')
Subject = request.POST.get('Subject')
Class = request.POST.getlist('Class')
print(Class)
teacher_user = Teacher.objects.get(User=request.user)
teacher = Teacher.objects.get(id=teacher_user.id)
created_class = Online_Class.objects.create( Link=Link, Subject=Subject,Created_by =teacher )
for classes in Class:
created_class.Class.set([classes])
return redirect('home')
return render(request, 'online_class/Teacher/class-create.html')
else:
messages.warning(request, 'Sorry You Dont have Permission to access this page')
return redirect('logout')
class Online_Class(models.Model):
Created_by = models.ForeignKey(Teacher, on_delete=models.DO_NOTHING)
Class = models.ManyToManyField(Classes)
Subject = models.CharField(max_length=100)
Link = models.CharField(max_length=200)
Joined_by = models.ManyToManyField(Student, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
choice = (('Yes','Yes'),('No', 'No'))
Class_Ended = models.CharField(choices=choice, default='No', max_length=10)
{% extends 'dashboard/teacher/base.html' %}
{% block title %} Create Class {% endblock title %}
{% block class %} active {% endblock class %}
{% block body %}
<div class="pc-container">
<div class="pcoded-content">
<div class="row">
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label >Zoom Link</label>
<input type="url" class="form-control" name="link" placeholder="URL" required="">
</div>
<div class="form-group">
<label>Subject</label>
<select class="form-control" name="Subject" required="">
{% for subject in teacher.Subject.all %}
<option>{{subject}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label >Select Class</label>
<select multiple class="form-control" name="Class" required="">
{% for class in teacher.Class.all %}
<option value="{{class.id}}">{{class}}</option>
{% endfor %}
</select>
<p class="help-text">Hold on ctrl to select multiple class in whindow and command in mac</p>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
{% endblock %}
我的models.py看起来像这样
@login_required()
def create_class(request):
tea_user = request.user.username
validate = teacher_validation(tea_user)
if validate:
if request.method == 'POST':
Link = request.POST.get('link')
Subject = request.POST.get('Subject')
Class = request.POST.getlist('Class')
print(Class)
teacher_user = Teacher.objects.get(User=request.user)
teacher = Teacher.objects.get(id=teacher_user.id)
created_class = Online_Class.objects.create( Link=Link, Subject=Subject,Created_by =teacher )
for classes in Class:
created_class.Class.set([classes])
return redirect('home')
return render(request, 'online_class/Teacher/class-create.html')
else:
messages.warning(request, 'Sorry You Dont have Permission to access this page')
return redirect('logout')
class Online_Class(models.Model):
Created_by = models.ForeignKey(Teacher, on_delete=models.DO_NOTHING)
Class = models.ManyToManyField(Classes)
Subject = models.CharField(max_length=100)
Link = models.CharField(max_length=200)
Joined_by = models.ManyToManyField(Student, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
choice = (('Yes','Yes'),('No', 'No'))
Class_Ended = models.CharField(choices=choice, default='No', max_length=10)
{% extends 'dashboard/teacher/base.html' %}
{% block title %} Create Class {% endblock title %}
{% block class %} active {% endblock class %}
{% block body %}
<div class="pc-container">
<div class="pcoded-content">
<div class="row">
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label >Zoom Link</label>
<input type="url" class="form-control" name="link" placeholder="URL" required="">
</div>
<div class="form-group">
<label>Subject</label>
<select class="form-control" name="Subject" required="">
{% for subject in teacher.Subject.all %}
<option>{{subject}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label >Select Class</label>
<select multiple class="form-control" name="Class" required="">
{% for class in teacher.Class.all %}
<option value="{{class.id}}">{{class}}</option>
{% endfor %}
</select>
<p class="help-text">Hold on ctrl to select multiple class in whindow and command in mac</p>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
{% endblock %}
我的模板看起来像这样
@login_required()
def create_class(request):
tea_user = request.user.username
validate = teacher_validation(tea_user)
if validate:
if request.method == 'POST':
Link = request.POST.get('link')
Subject = request.POST.get('Subject')
Class = request.POST.getlist('Class')
print(Class)
teacher_user = Teacher.objects.get(User=request.user)
teacher = Teacher.objects.get(id=teacher_user.id)
created_class = Online_Class.objects.create( Link=Link, Subject=Subject,Created_by =teacher )
for classes in Class:
created_class.Class.set([classes])
return redirect('home')
return render(request, 'online_class/Teacher/class-create.html')
else:
messages.warning(request, 'Sorry You Dont have Permission to access this page')
return redirect('logout')
class Online_Class(models.Model):
Created_by = models.ForeignKey(Teacher, on_delete=models.DO_NOTHING)
Class = models.ManyToManyField(Classes)
Subject = models.CharField(max_length=100)
Link = models.CharField(max_length=200)
Joined_by = models.ManyToManyField(Student, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
choice = (('Yes','Yes'),('No', 'No'))
Class_Ended = models.CharField(choices=choice, default='No', max_length=10)
{% extends 'dashboard/teacher/base.html' %}
{% block title %} Create Class {% endblock title %}
{% block class %} active {% endblock class %}
{% block body %}
<div class="pc-container">
<div class="pcoded-content">
<div class="row">
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label >Zoom Link</label>
<input type="url" class="form-control" name="link" placeholder="URL" required="">
</div>
<div class="form-group">
<label>Subject</label>
<select class="form-control" name="Subject" required="">
{% for subject in teacher.Subject.all %}
<option>{{subject}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label >Select Class</label>
<select multiple class="form-control" name="Class" required="">
{% for class in teacher.Class.all %}
<option value="{{class.id}}">{{class}}</option>
{% endfor %}
</select>
<p class="help-text">Hold on ctrl to select multiple class in whindow and command in mac</p>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
{% endblock %}
{%extends'仪表板/teacher/base.html%}
{%block title%}创建类{%endblock title%}
{%block class%}活动的{%endblock class%}
{%block body%}
{%csrf_令牌%}
缩放链接
主题
{teacher.subject.all%中的主题为%s}
{{subject}}
{%endfor%}
选课
{teacher.class.all%中的类为%s}
{{class}}
{%endfor%}
按住ctrl键可选择whindow中的多个类和mac中的命令
提交
{%endblock%}
请帮助我,我不知道为什么,但当我选择2个项目时,它也只在多对多字段中保存1个项目添加新元素时,您正在使用
set
,这是不正确的:已创建\u class.class.set([classes])
使用添加:
对于类中的类:
已创建\u class.class.add([classes])
或者更简单,将类
传递到添加
:
created\u class.class.add(class)