【问题标题】:Inline Form Set: Django 'main.Course' has no ForeignKey to 'main.Teacher'内联表单集:Django 'main.Course' 没有 ForeignKey 到 'main.Teacher'
【发布时间】:2020-05-13 10:38:03
【问题描述】:

我有这个错误,无法真正识别错误。在动态 url 路由中,我识别了预定义应用程序名称(主)的 url,然后是 url。

<a class="btn btn-info" href="{% url 'main:teacher' teacher.fname %}">View</a>

这可能与内联表单集的错误有关吗? 型号:

class Teacher(models.Model):
    teacher_id = models.AutoField(primary_key=True,blank=True)
    fname = models.CharField(max_length=200)
    lname = models.CharField(max_length=200)
    tsc_no = models.CharField(max_length=200,blank=True,unique=True)
    email = models.CharField(max_length=200,blank=True,unique=True)
    password = models.CharField(max_length=200,blank=True)
    profile_picture = models.ImageField(verbose_name='profile_picture',upload_to='photos/%Y/%m/%d',blank=True)
    national_id = models.CharField(max_length=200,unique=True)
    dob  = models.DateField(blank=True)
    phone_number = PhoneNumberField()
    status = models.CharField(max_length=200)
    clas_teacher = models.CharField(max_length=200,blank=True)
    date_of_join = models.DateField(blank=True)
    timetable_color = models.CharField(max_length=200)

class Course(models.Model):
    course_id = models.AutoField(primary_key=True)
    course_name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    teacher = models.ManyToManyField(Teacher)

    class Meta:
        ordering = ['course_name']

    def __str__(self):
        return self.course_name

观点:

def addmoreteacher(request,pk_test):


    teacher = Teacher.objects.get(fname=pk_test)
    CourseFormSet = inlineformset_factory(Teacher,Course,fields = ('course_name','description'))
    formset =  CourseFormSet(instance=teacher)

    #form = CourseForm(initial = {'teachers_teaching':teacher})

    if request.method == 'POST':
        #form = TeacherForm(request.POST)
        #print(form)
        formset =  CourseFormSet(request.POST,instance=teacher)
        if formset.is_valid():
            formset.save()
            print("saved")
            return redirect('/')
        else:
            print(formset.errors)

    context = {'formset': formset}
    return render(request = request,template_name='main/addmoreteacher_form.html',context=context)

【问题讨论】:

  • 尝试将此teacher = models.ManyToManyField(Teacher) 更改为teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)。注意:现在两个或更多的老师不能一起拥有课程。如果您不希望对 ForeignKey 进行此更改。
  • 我已经添加了一个答案,请考虑接受它作为解决方案。

标签: django forms view set inline


【解决方案1】:

更改 models.py 的 Course 类的教师字段,

从,

teacher = models.ManyToManyField(Teacher)

到,

models.ForeignKey(Teacher, on_delete=models.CASCADE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2019-05-15
    • 2011-07-11
    • 2011-09-17
    • 2016-03-15
    相关资源
    最近更新 更多