django 3.0 встроенная форма администратора foreignkey -> foreignkey - PullRequest
0 голосов
/ 05 мая 2020

У меня есть любые модели и один Менеджер

app / models.py

class castratedListStudent(models.Manager):
    use_in_migrations = False
def get_query_set(self):
    return super().get_query_set().filter(isOn=1)

class student(models.Model):
    id = models.AutoField(primary_key=True)
    firstName = models.CharField(max_length=20)
    lastName = models.CharField(max_length=20)
    isOn = models.BooleanField()

    default_manager = castratedListStudent()
    objects = castratedListStudent()

class discipline(models.Model):
    id = models.AutoField(primary_key=True)
    nameDiscipline = models.CharField(max_length=100, null=False)
    itemIdToDiscip = models.ForeignKey(item, on_delete=models.CASCADE, default=1)

class listOfStudForDiscipline(models.Model):
    id = models.AutoField(primary_key=True)
    discipListId = models.ForeignKey(discipline, on_delete=models.CASCADE)
    studId = models.ForeignKey(student, on_delete=models.CASCADE)

Я использую django inline

accounts / admin.py

class discipStudentInline(admin.TabularInline):
    model = listOfStudForDiscipline
    admin.TabularInline.verbose_name = 'Student'
    extra = 0

    def has_change_permission(self, request, obj=None):
        return False

    def get_queryset(self, request):
        return self.model.objects.filter(studId__isOn=1)

class disciplineAdmin(admin.ModelAdmin):
    model = discipline
    inlines = [discipStudentInline]

Встроенная форма отображается на странице HTML, и фильтр (studId__isOn = 1) работает. Но проблема в том, что на странице HTML ниже есть поле, которое позволяет вам добавить еще одного студента, и список студентов не фильтруется правилом фильтра (studId__isOn = 1), когда я проверяю консоль DEBUG_ SQL , Я могу видеть, как выполняется запрос без выражения WHERE "FROM journal_student".

(0.000) SELECT `journal_listofstudfordiscipline`.`id`, `journal_listofstudfordiscipline`.`discipListId_id`, `journal_listofstudfordiscipline`.`studId_id` FROM `journal_listofstudfordiscipline` INNER JOIN `journal_student` ON (`journal_listofstudfordiscipline`.`studId_id` = `journal_student`.`id`) WHERE (`journal_student`.`isOn` = 1 AND journal_listofstudfordiscipline`.`discipListId_id` = 1) ORDER BY `journal_student`.`lastName` DESC; args=(True, 1)
(0.000) SELECT `journal_student`.`id`,..., `journal_student`.`descriptionStudent` FROM  journal_student` ORDER BY `journal_student`.`lastName` ASC, `journal_student`.`firstName` ASC; args=()

Я не смог решить проблему с помощью диспетчера моделей.

output

1 Ответ

0 голосов
/ 07 мая 2020

Я решил проблему. Оказалось, что после django версии 1.7 метод get_query_set () был переименован в get_queryset (). И Менеджер теперь будет выглядеть так:

class castratedListStudent(models.Manager):
    use_in_migrations = False
def get_query_set(self):
    return super(liveListStudent, self).get_queryset().filter(isOn=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...