Python Django多对多字段未正确保存在数据库中

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':

当我试图在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':
            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)