【问题标题】:excluding id field in an inline formset when saving保存时排除内联表单集中的 id 字段
【发布时间】:2016-10-22 03:44:04
【问题描述】:

我有两个模型,通过外键连接。一种是内联表单集。由于某种原因,formset ids被识别为数据库中的主键,每次提交表单时,属于formset的表基本上都会被覆盖。保存时如何忽略formset ids

models.py

class Student(models.Model):
    first_name = models.CharField(max_length=40)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Courses(models.Model):
    student = models.ForeignKey(Student)
    course_name = models.CharField(max_length=40)
    start_time = models.TimeField()

forms.py

class CoursesForm(forms.ModelForm):

    class Meta:
        model = Courses
        exclude = ("student",)


class StudentForm(forms.ModelForm):

    class Meta:
        model = Student
       fields = "__all__"

views.py ...

def post(self, request, *args, **kwargs):
    sform = StudentForm(request.POST, instance=Student())

    CourseSchedule = inlineformset_factory(Student, Courses, form=CoursesForm, can_delete=False, extra=0, min_num=1)

    cforms = CourseSchedule(data=request.POST)

    if sform.is_valid() and cforms.is_valid():

        sform_obj = sform.save()
        for cform in cforms.forms:
            cform_obj = cform.save(commit=False)
            cform_obj.student = sform_obj
            cform_obj.save()

    ....

【问题讨论】:

  • 模型中的关系在哪里
  • 先在Courses模型students = models.ManyToManyField(Student)的两个表之间创建m:m relationship
  • 然后以正确的方式使用inline formsetinline
  • 这是一对多的关系,

标签: python django inline-formset


【解决方案1】:

我想通了.. 我的表单集数据在提交后仍然存在。我必须在 basemodelformset 中声明一个空的查询集。

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 2010-10-08
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 2018-11-27
    • 2017-03-21
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多