【问题标题】:django-filter showing model objects when querying foreign key itemsdjango-filter 在查询外键项时显示模型对象
【发布时间】:2020-10-29 23:51:47
【问题描述】:

我使用 django-filter 创建了一个 filter,它应该 查询 YearLevel 字段并显示与所选复选框匹配的行(第 8 年、第 9 年、第 ...)。

虽然过滤器有点工作,因为它显示了一个正常工作的 CharFilter/Field,我可以手动输入年份级别并返回相应的行/秒;它下面包含一堆以主键作为标签的复选框,并且在选中时不返回任何内容。

我的模型:

class StudentProfile(models.Model):
    RelatedPersonName = models.CharField(max_length=10)
    RelatedPersonFirstName = models.CharField(max_length=30)
    RelatedPersonFamName = models.CharField(max_length=30)
    StudentLegalName = models.CharField(max_length=30)
    StudentFamName = models.CharField(max_length=30)
    Email = models.CharField(max_length=130)
    Street1  = models.TextField(max_length=30)
    Suburb = models.CharField(max_length=30)
    State = models.CharField(max_length=5)
    PostCode = models.CharField(max_length=6)
    StudentLegalName = models.CharField(max_length=30)
    StudentFamName = models.CharField(max_length=30)
    StudentNo = models.CharField(primary_key=True,max_length=10)
    Class = models.CharField(max_length=6)
    YearLevel = models.CharField(max_length=10)
    objects = StudentProfileManager()
    
class AttendanceQuerySet(models.QuerySet):
    def get_yearlevel(self, yearlevel):
        return self.select_related('BCEID').filter(BCEID_id__YearLevel = yearlevel)

    def get_all_studentprofile(self):
        return self.select_related('BCEID')

class AttendanceManager(models.Manager):
    def get_queryset(self):
        return AttendanceQuerySet(self.model, using=self._db)

    def get_yearlevel(self, yearlevel):
        return self.get_queryset().get_yearlevel(yearlevel)

    def get_all_studentprofile(self):
        return self.get_queryset().get_all_studentprofile()

class Attendance(models.Model):
    BCEID = models.OneToOneField(StudentProfile,primary_key=True,on_delete=models.CASCADE)
    AttendanceRate = models.CharField(max_length=10)
    objects = AttendanceManager()

过滤器.py

class YearLevelFilter(django_filters.FilterSet):

    yearlevel = django_filters.ModelMultipleChoiceFilter(
        queryset=Attendance.objects.all().distinct(),
        field_name="StudentNo",
        to_field_name="BCEID",
        widget=forms.CheckboxSelectMultiple(),
        label="Year Level",
        label_suffix="",
    )

    class Meta:
        model = Attendance
        fields = ['BCEID__YearLevel']

请帮忙。

注意。请忽略驼峰式变量。

【问题讨论】:

    标签: django filter foreign-keys inner-join django-filter


    【解决方案1】:

    这样做就可以了:

    class YearLevelFilter(django_filters.FilterSet):
       
        YEARLEVELS = (
            ('Year 7', 'Year 7'),
            ('Year 8', 'Year 8'),
            ('Year 9', 'Year 9'),
            ('Year 10', 'Year 10'),
            ('Year 11', 'Year 11'),
            ('Year 12', 'Year 12'),
        )
    
        BCEID__YearLevel = django_filters.MultipleChoiceFilter(choices=YEARLEVELS, widget=forms.CheckboxSelectMultiple)
    
        class Meta:
            model = Attendance
            fields = ['BCEID__YearLevel']
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多