Невозможно выполнить фильтрацию, используя набор запросов из БД, чтобы показать отфильтрованные параметры в форме или фильтре плюс проверка перед сохранением. - PullRequest
0 голосов
/ 01 февраля 2019

Это моя модель 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, но не мог заставить его работать.Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...