【问题标题】:Customizing Django Forms自定义 Django 表单
【发布时间】:2020-03-21 06:33:18
【问题描述】:

我创建了一个名为“出勤”的模型。

class Attendance(models.Model) :
    course_name = models.ForeignKey(Course, on_delete=models.SET_NULL, null=True)
    student_name = models.ManyToManyField(Student)
    instructor_name = models.ForeignKey(Instructor, on_delete=models.SET_NULL, null=True)
    published_date = models.DateTimeField(blank=True, null=True)

当我将其作为表单传递时,在选择了特定课程后,我必须从所有课程的学生名单中选择学生。相反,我想对其进行自定义,以便只显示注册该特定课程的学生

我已尝试将 through fields 用于 student_name 字段,但在这种情况下,我需要在 Student 模型中将出勤率作为外键传递,并且我需要在创建出勤率实例之前创建出勤率实例学生。

models.py:

class Course(models.Model) :
    name = models.CharField(max_length=20, default='')
    course_code = models.CharField(max_length=10, default='')

class Student(models.Model) :
    name = models.CharField(max_length=20, default='')
    rollno = models.CharField(max_length=10, unique=True, default='')
    course_name = models.ManyToManyField(Course)
    email_id = models.EmailField(max_length=40, default='')

class Instructor(models.Model) :
    name = models.OneToOneField(User, on_delete=models.CASCADE)
    course_name = models.ForeignKey(Course, models.SET_NULL, blank=True, null=True)

此外,这是包含考勤表链接的模板。我已经通过了必须将出勤率作为参数的课程。

{% block content %}
      <h2>Select the course for which attendance has to be taken</h2>
      <h3><a href="{% url 'student_list' pk=clone_teacher.course_name.pk %}">{{ clone_teacher.course_name }}</a></h3>
{% endblock %}

我被困在这里很长一段时间了。请帮忙。

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    您可以覆盖 ModelForm 的 init 来过滤 ManyToMany 字段。

    class AttendanceForm(forms.ModelForm):
    
        class Meta:
            model = Attendance
            fields = '__all__'
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            if self.instance.pk:
                self.fields['student_name'].queryset = Student.objects.filter(course_name=self.instance.course_name)
    

    【讨论】:

    • 谢谢,它成功了,但是ManyToManyField一旦输入并保存在表单中就不会保存在数据库中。
    • @ShreyasShetty:您可以将视图发布到您保存表单的位置吗?或者甚至更好地在发布视图时提出一个新问题
    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2016-07-06
    • 2017-09-02
    • 2017-05-02
    相关资源
    最近更新 更多