Это моя модель django:
Модель инструкторов, которая используется для зарегистрированных инструкторов:
class Instructors(models.Model):
username = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, to_field='username')
contact_home = models.CharField(max_length=200)
contact_mobile = models.CharField(max_length=200)
start_date = models.DateTimeField('Joining Date', default=None)
end_date = models.DateTimeField('Relieving Date', default=None, null=True, blank=True)
comments = models.CharField(max_length=500, blank=True, default='None')
class Meta:
verbose_name = "Instructors"
verbose_name_plural = "Instructors"
def __str__(self):
return '{}'.format(self.username)
Название курса
class Course(models.Model):
course_name = models.CharField(max_length=200, unique=True)
course_indentifier = models.CharField(max_length=200, unique=True)
course_type = models.ForeignKey(CourseType, on_delete=models.PROTECT, to_field='course_type')
def __str__(self):
return '{} - {} - {}'.format(self.course_name, self.course_indentifier, self.course_type)
Расписание создано дляпреподаватель с названием курса и номером комнаты с диапазоном дат, который не может конфликтовать
class Schedule(models.Model):
instructor = models.ForeignKey(settings.AUTH_USER_MODEL, unique=False, on_delete=models.PROTECT, to_field='username')
start_date = models.DateTimeField('Start Date', default=None)
end_date = models.DateTimeField('End Date', blank=True, null=True)
room_number = models.ForeignKey(Room, unique=False, on_delete=models.PROTECT, to_field='room_number')
student_numbers = models.IntegerField('Student Numbers', default=1)
course_name = models.ForeignKey(Course, unique=False, on_delete=models.PROTECT, to_field='course_name')
def __str__(self):
return '{}, Start {}, End {} Room {}'.format(self.course_name.course_name, self.start_date, self.end_date, self.room_number.room_number)
Следующее посещение является тем, прошел ли инструктор курс или нет.Поле course_name является внешним ключом для Schedule.Это тянет все расписание, созданное для инструктора и другого инструктора.I want to filter the course_name for InstructorAttendance only based on/filtered on the specific loggedin instructor
(имя пользователя модели администратора, как видно из модели инструктора).Я not able to do a queryset in InstructorAttendance queryset and filter it
.Во-вторых, the schedule should not save if the date range clashes for a room
, который я пытаюсь манипулировать функцией save_model в ScheduleAdmin, которая не может сказать, что объекты и функции фильтра недоступны в переменной qs.
class InstructorAttendance(models.Model):
instructor = models.CharField(max_length=200, editable=False)
course_name = models.ForeignKey(Schedule, on_delete=models.PROTECT, default=None, related_name='schedule_course_name')
lecture_date = models.DateField('Lecture Date', default=None, auto_created=False, blank=False, null=False)
loggedin_date = models.DateTimeField('Attendance Entry Date', default=timezone.now, editable = False, auto_created=True)
def __str__(self):
return '{} Conducted by {}'.format(self.lecture_date, self.instructor)
Я регистрирую свою модель, используя следующее:
class ScheduleAdmin(admin.ModelAdmin):
fieldsets = [
(None, { 'fields': ['instructor', 'start_date','end_date', 'room_number', 'student_numbers', 'course_name'] })
]
def save_model(self, request, obj, form, change):
# qs = super(ScheduleAdmin, self).filter(room_number=1)
# qs.filter(room_number=request.POST.room_number)
# if len(qs) == 0:
return super(ScheduleAdmin, self).save_model(request, obj, form, change)
admin.site.register(Schedule, ScheduleAdmin)
Я пытаюсь применить фильтр, выполнив поиск по расписанию модели в базе данных, а затем покажу опции, относящиеся к конкретному имени комнаты.Тем не менее, даже если я пытаюсь получить get_queryset, а затем фильтр или просто фильтр, он выдает ошибку, говоря, что объект / функция недоступна в переменной.Как сохранить список опций, основываясь только на опции room_name?
Я также пытался формы, чтобы просто показать доступные опции, основанные на room_name, но не мог заставить его работать.Любая помощь приветствуется.