Python Django-多对多关系不保存

Python Django-多对多关系不保存,python,django,Python,Django,我正在为一所教育学校创建一个应用程序。学校有一个正规的班级(继承自基础班级),还有一个跟踪班级时间表的LessonSchedule班级 特别是,学校班级(基班)与课表有着多对多的关系。特别是,一个SchoolClass对象应该有48个课程计划(例如,第0周、第1周、第2周;一年中有48个课程)。同时,一个特定的课程表可以由多个SchoolClass对象共享,因此我选择了多对多关系 我写了一些逻辑,每当用户在管理控制台中更改一个类的日期时,它都应该自动更改链接到该类的所有LessonScheule

我正在为一所教育学校创建一个应用程序。学校有一个正规的班级(继承自基础班级),还有一个跟踪班级时间表的LessonSchedule班级

特别是,学校班级(基班)与课表有着多对多的关系。特别是,一个SchoolClass对象应该有48个课程计划(例如,第0周、第1周、第2周;一年中有48个课程)。同时,一个特定的课程表可以由多个SchoolClass对象共享,因此我选择了多对多关系

我写了一些逻辑,每当用户在管理控制台中更改一个类的日期时,它都应该自动更改链接到该类的所有LessonScheules。例如,如果一节课原本是星期二,而改为星期三,那么所有的课程安排都应该相应地改变

奇怪的是,这并没有显示在管理控制台中-它默认为0课程计划,即使在我保存之后。但在控制台中,self.lesson_schedule.all().count()显示48。想知道是否有人能引导我找到正确的答案

我选中了()并且我的案例似乎有所不同,因为我已经保存了父对象(我正在使用post save)

models.py(适用于学校班级)

models.py(用于lessonschedule)


请参阅图像附件。只需使用django.contrib import admin中的admin
,如果使用ModelForm,可以尝试这种方法

class GrupoIncidenciaForm(forms.ModelForm):
id = forms.CharField(required=False, widget=forms.HiddenInput())

codigo = forms.CharField(required=True,
                         label='Código',
                         widget=forms.TextInput(attrs={'maxlength': '5', 'class': 'text-uppercase'}))

titulo = forms.CharField(required=True, label='Título', widget=forms.TextInput(attrs={'maxlength': '255'}))

class Meta:
    model = GrupoIncidencia
    fields = '__all__'
    labels = {
        'tipo': 'Tipo'
    }

def clean_codigo(self):
    return self.cleaned_data['codigo'].upper().zfill(5)

def __init__(self, *args, **kwargs):
    if kwargs.get('instance'):
        initial = kwargs.setdefault('initial', {})
        initial['incidencias'] = [t.pk for t in kwargs['instance'].incidencias.all()]
    forms.ModelForm.__init__(self, *args, **kwargs)

def save(self, commit=True):
    instance = forms.ModelForm.save(self, False)
    old_save_m2m = self.save_m2m

    def save_m2m():
        old_save_m2m()
        instance.incidencias.clear()
        for incidencia in self.cleaned_data['incidencias']:
            instance.incidencias.add(incidencia)

    self.save_m2m = save_m2m
    if commit:
        instance.save()
        self.save_m2m()

    return instance

发布views.py,在其中呈现formI,因为我没有使用自定义表单-它是默认的管理表单。因此views.py是空的。
#used to track the day for a lesson
#for regular classes, start_date should be the date of the first lesson in the year 
class LessonSchedule(models.Model):
    start_date = models.DateField()
    lesson_index = models.IntegerField()
    lesson_date = models.DateField()

    class Meta:
        unique_together = 'start_date', 'lesson_index')
class GrupoIncidenciaForm(forms.ModelForm):
id = forms.CharField(required=False, widget=forms.HiddenInput())

codigo = forms.CharField(required=True,
                         label='Código',
                         widget=forms.TextInput(attrs={'maxlength': '5', 'class': 'text-uppercase'}))

titulo = forms.CharField(required=True, label='Título', widget=forms.TextInput(attrs={'maxlength': '255'}))

class Meta:
    model = GrupoIncidencia
    fields = '__all__'
    labels = {
        'tipo': 'Tipo'
    }

def clean_codigo(self):
    return self.cleaned_data['codigo'].upper().zfill(5)

def __init__(self, *args, **kwargs):
    if kwargs.get('instance'):
        initial = kwargs.setdefault('initial', {})
        initial['incidencias'] = [t.pk for t in kwargs['instance'].incidencias.all()]
    forms.ModelForm.__init__(self, *args, **kwargs)

def save(self, commit=True):
    instance = forms.ModelForm.save(self, False)
    old_save_m2m = self.save_m2m

    def save_m2m():
        old_save_m2m()
        instance.incidencias.clear()
        for incidencia in self.cleaned_data['incidencias']:
            instance.incidencias.add(incidencia)

    self.save_m2m = save_m2m
    if commit:
        instance.save()
        self.save_m2m()

    return instance