django 3.0内联管理表单Foreignkey-> Foreignkey

时间:2020-05-04 23:00:01

标签: django

我有任何型号和一个经理

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)。该查询不包含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 :(得分:0)

我解决了这个问题。事实证明,在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)