首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-filter 1.1.0中的多模型

Django-filter 1.1.0中的多模型
EN

Stack Overflow用户
提问于 2018-12-03 10:46:40
回答 2查看 2.9K关注 0票数 4

我想实现一个过滤器的最终用户的网站,以便他们可以过滤按价格,评级,性别和地点。

这里的问题是,价格和评级存储在模型类“注释”中,以及模特类“冒险”中的位置和性别。

在“注释”类中,外键引用“冒险”。

如何在我的filters.py中使用Django-filter 1.1.0来处理相互引用的模型“注释”和“冒险”,以根据上述参数进行筛选?

这是我的代码,但只过滤类“冒险”。如何将此代码扩展到由外部引用的参数进行筛选以返回匹配的冒险?

filters.py

代码语言:javascript
复制
import django_filters

class AdventureFilter(django_filters.FilterSet):
      class Meta:
            model = Adventure
            fields = {
            'gender',
            'location',
            }

models.py

代码语言:javascript
复制
class Comment(models.Model):
    verfasser = models.ForeignKey(User, on_delete=models.CASCADE)
    related_adventure = models.ForeignKey(Adventure, on_delete=models.CASCADE, related_name='comments')
    rating_choices = (
                      (1, '1 Stern'),
                      (2, '2 Sterne'),
                      (3, '3 Sterne'),
                      (4, '4 Sterne'),
                      (5, '5 Sterne')
    )       
    Rating = models.PositiveIntegerField(null=True, choices=rating_choices,blank=False, default=0)
    verfasst_am = models.DateTimeField(default=timezone.now, blank=True, null=True)
    heading = models.CharField(max_length=100,blank=True,null=True, help_text="100 Zeichen")
    ratingtext= models.TextField(max_length=400, blank=True, null=True,help_text="400 Zeichen")

    price = models.PositiveIntegerField(null=True, help_text="Deine Ausgaben (pro Kopf) bei diesem Adventure", blank=True)



class Adventure(models.Model):
    adventure_id = models.AutoField(primary_key=True)
    owner = models.ForeignKey(User,on_delete=models.CASCADE, null=True)
    name = models.CharField(max_length=64)
    place = PlacesField(blank=False)
    location_CHOICES = (
            ('IN', 'indoor'),
            ('OUT', 'outdoor'),
            ('INOUT', 'indoor and outdoor'),
    )
    location = models.CharField(
            max_length=10,
            choices=lokation_CHOICES,
    )


    gender_CHOICES = (
            ('male', 'male'),
            ('female', 'female'),
            (EGAL, 'egal'),
    )
    gender= models.CharField(
            max_length=9,
            choices=geschlecht_CHOICES,
            default=EGAL,
    )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-03 11:18:16

这是来自医生们的一个例子

代码语言:javascript
复制
class ProductFilter(django_filters.FilterSet):
    price = django_filters.NumberFilter()
    price__gt = django_filters.NumberFilter(name='price', lookup_expr='gt')
    price__lt = django_filters.NumberFilter(name='price', lookup_expr='lt')

    release_year = django_filters.NumberFilter(name='release_date', lookup_expr='year')
    release_year__gt = django_filters.NumberFilter(name='release_date', lookup_expr='year__gt')
    release_year__lt = django_filters.NumberFilter(name='release_date', lookup_expr='year__lt')

    manufacturer__name = django_filters.CharFilter(lookup_expr='icontains')

    class Meta:
        model = Product

过滤器有两个主要的论据:

  • 名称:要筛选的模型字段的名称。您可以使用Django的__语法来筛选相关模型上的字段,从而遍历“关系路径”。前任,manufacturer__name.
  • lookup_expr:在过滤时使用的字段查找。可以再次使用Django的__语法来支持查找转换。前任,year__gte.

注意到"__“链接,我认为您可以直接使用它,而无需在字段= []中执行这些显式的操作。

票数 3
EN

Stack Overflow用户

发布于 2018-12-04 10:12:34

fields = {'gender','location',}编写为fields = {'gender','location','comments__price', 'comments__Rating'}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53592160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档