在Django中使用过滤后的表值作为选择

时间:2019-01-30 03:22:45

标签: python django model

我正在使用django 2.1.5v,并正在创建将在admin部分中使用的模型,并试图避免为此创建单独的视图。这是我的模特:

class Schedule(models.Model):
    instructor = models.ForeignKey(Instructors, on_delete=None, to_field='username')
    start_time = models.DateTimeField('Start Time', default=None)
    course_name = models.ForeignKey(Course, unique=False, on_delete=None, to_field='course_name')

    def __str__(self):
        return 'Course {}, Start {}, End {} Room {}'.format(self.course_name, self.start_time, self.room_number)

出勤模式如下:

class InstructorAttendance(models.Model):
    instructor = models.CharField(max_length=200, editable=False)
#    course_name = LIST PICKED FROM SCHEDULE BASED ON INSTRUCTOR NAME
    lecture_date = models.DateField('Lecture Date', default=None, auto_created=False, blank=False, null=False)

    def __str__(self):
        return '{} Conducted'.format(self.lecture_date)

我想要InstructorAttendance模型中的属性course_name,该属性将是已创建/可用的日程表列表中的course_name的列表。如果不存在,则下拉菜单中将没有选项。这将在admin部分中,并且我已经注册了admin.site.register(InstructorAttendance)之类的模型。我正在尝试使用选择,但似乎不可能。有人可以帮我吗?

**更新 现在,我可以从Schedule模型中获取所有值的列表。但是,我想基于course_name过滤instructor的值,该值与管理路由中的request.user值相同。有人尝试过吗?想要避免更改表格。我相信这应该可行吗?我无法在基于https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin表单的clean_data正常工作中获得建议。

1 个答案:

答案 0 :(得分:0)

您的InstructorAttendance模型也应该与Course有关系。

class InstructorAttendance(models.Model):
    course = models.ForeignKey(Course)
    # ...

然后您应该为InstructorAttendance编写一个自定义管理表单,并使课程字段使用使用现有/可用课程初始化的Select小部件。

有关详情,请参见此answer