首页 > 解决方案 > 多对多不保存在 django

问题描述

我的views.py文件:

表单 = ClassesForm(request.POST)

    if form.is_valid():

        New_Class =  Classes()

        New_Class.semester = Last_Semester
        New_Class.year = form.cleaned_data.get('year')
        if form.cleaned_data.get('year') >= 6 and form.cleaned_data.get('year') <= 8:
            New_Class.school_mode = 1
        else:
            New_Class.school_mode = 2
        New_Class.brunch = form.cleaned_data.get('brunch')
        New_Class.subject = form.cleaned_data.get('subject')
        
        
        New_Class.teacher.set(Staff.objects.filter(uuid=form.cleaned_data.get('teacher').uuid))
        New_Class.save()

我的models.py文件:

@reversion.register() class Classes(BaseModel): 学期 = models.ForeignKey(Semester, on_delete=models.PROTECT,default=get_last_semester, verbose_name= ("Semester")) school_mode = models.IntegerField(db_index=True, Choices= SCHOOL_MODE, verbose_name= ("School Type")) year = models.IntegerField(db_index=True, Choices=CLASS_YEARS, verbose_name= ("Year")) brunch = models.CharField(max_length=2, verbose_name= ("Class Brunch" )) subject = models.CharField(max_length=15,choices=CLASS_SUBJECTS,verbose_name= ("Subject")) **teacher = models.ManyToManyField(Staff, blank=True, verbose_name= ("Class Teachers"))**

class Meta:
    unique_together = ('semester', 'year', 'brunch')
    ordering = ['semester', 'year', 'brunch', 'subject']

def __unicode__(self):
     return "%d %s %s %s / %s" % (self.semester, self.year, self.brunch, self.subject)

auditlog.register(类)

@reversion.register() 类 Staff(BaseModel): photo = models.ImageField(upload_to="Staff/", null=True, blank=True, verbose_name= ("Photo")) user = models.OneToOneField(User, on_delete =models.PROTECT, db_index=True, verbose_name= ("User")) name = models.CharField(max_length=30, db_index=True, verbose_name= ("Name")) surname = models.CharField(max_length=30, db_index =True, verbose_name= ("Surname")) id_no = models.CharField(max_length=15, unique=True,verbose_name= ("ID Card Number")) 出生日期 = models.DateField(verbose_name= ("Birthdate")) 出生地= models.CharField(max_length=30, verbose_name= ("出生地")) 性别 = models.IntegerField(choices=GENDERS, default=None, verbose_name=("性别")) 国籍 = models.CharField(choices=NATIONALITIES, max_length=20, verbose_name= ("国籍")) blood_type = models.CharField(choices=BLOOD_TYPES, null=True, blank=True, max_length=10, verbose_name= ("血型")) phone_home = models.CharField(max_length=15, null=True, blank=True, verbose_name= ("Phone Home")) phone_mobile = models.CharField(max_length=15, null=True, blank=True, verbose_name= ("Phone Mobile")) email = models.EmailField(default=None, null=True, blank=True, verbose_name= ("Email Address")) address = models.TextField(verbose_name= ("地址")) 早午餐 = models.ForeignKey(TeacherBrunch, on_delete=models.PROTECT, verbose_name= ("Brunch")) staff_type = models。ManyToManyField(StaffType,verbose_name=("员工类型")) staff_status = models.IntegerField(choices=STAFF_STATUS, default=1, verbose_name= ("员工状态")) additional_information = models.CharField(max_length=100, null=True, blank=True, verbose_name=(“附加信息”))

class Meta:
    ordering = ['name', 'surname']

def __unicode__(self):
    return "%s %s" % (self.name, self.surname)

def save(self, *args, **kwargs):
    self.name = self.name.title()
    self.surname = self.surname.upper()
    self.user.save()
    super(Staff, self).save(*args, **kwargs)

标签: djangomanytomanyfield

解决方案


我的views.py文件:

 form = ClassesForm(request.POST)

    if form.is_valid():

        New_Class =  Classes()

        New_Class.semester = Last_Semester
        New_Class.year = form.cleaned_data.get('year')
        if form.cleaned_data.get('year') >= 6 and form.cleaned_data.get('year') <= 8:
            New_Class.school_mode = 1
        else:
            New_Class.school_mode = 2
        New_Class.brunch = form.cleaned_data.get('brunch')
        New_Class.subject = form.cleaned_data.get('subject')
        
        
        New_Class.teacher.set(Staff.objects.filter(uuid=form.cleaned_data.get('teacher').uuid))
        New_Class.save()




    return redirect(reverse('Create-Classes'))

我的模型.py

 class Classes(BaseModel):
semester = models.ForeignKey(Semester, on_delete=models.PROTECT,default=get_last_semester, verbose_name=_("Semester"))
school_mode = models.IntegerField(db_index=True, choices=SCHOOL_MODE, verbose_name=_("School Type"))
year = models.IntegerField(db_index=True, choices=CLASS_YEARS, verbose_name=_("Year"))
brunch = models.CharField(max_length=2, verbose_name=_("Class Brunch"))
subject = models.CharField(max_length=15, choices=CLASS_SUBJECTS, verbose_name=_("Subject"))
teacher = models.ManyToManyField(Staff, blank=True, verbose_name=_("Class Teachers"))

class Meta:
    unique_together = ('semester', 'year', 'brunch')
    ordering = ['semester', 'year', 'brunch', 'subject']

def __unicode__(self):
     return "%d %s %s %s / %s" % (self.semester, self.year, self.brunch, self.subject)


class Staff(BaseModel):
photo = models.ImageField(upload_to="Staff/", null=True, blank=True, verbose_name=_("Photo"))
user = models.OneToOneField(User, on_delete=models.PROTECT, db_index=True, verbose_name=_("User"))
name = models.CharField(max_length=30, db_index=True, verbose_name=_("Name"))
surname = models.CharField(max_length=30, db_index=True, verbose_name=_("Surname"))
id_no = models.CharField(max_length=15, unique=True,verbose_name=_("ID Card Number"))
birthdate = models.DateField(verbose_name=_("Birthdate"))
birthplace = models.CharField(max_length=30, verbose_name=_("Birthplace"))
gender = models.IntegerField(choices=GENDERS, default=None, verbose_name=_("Gender"))
nationality = models.CharField(choices=NATIONALITIES, max_length=20, verbose_name=_("Nationality"))
blood_type = models.CharField(choices=BLOOD_TYPES, null=True, blank=True, max_length=10, verbose_name=_("Blood Type"))
phone_home = models.CharField(max_length=15, null=True, blank=True, verbose_name=_("Phone Home"))
phone_mobile = models.CharField(max_length=15, null=True, blank=True, verbose_name=_("Phone Mobile"))
email = models.EmailField(default=None, null=True, blank=True, verbose_name=_("Email Address"))
address = models.TextField(verbose_name=_("Address"))
brunch = models.ForeignKey(TeacherBrunch, on_delete=models.PROTECT, verbose_name=_("Brunch"))
staff_type = models.ManyToManyField(StaffType, verbose_name=_("Staff Type"))
staff_status = models.IntegerField(choices=STAFF_STATUS, default=1, verbose_name=_("Staff Status"))
additional_information = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Additional Information"))

class Meta:
    ordering = ['name', 'surname']

def __unicode__(self):
    return "%s %s" % (self.name, self.surname)

def save(self, *args, **kwargs):
    self.name = self.name.title()
    self.surname = self.surname.upper()
    self.user.save()
    super(Staff, self).save(*args, **kwargs)

推荐阅读