我想实现一个过滤器的最终用户的网站,以便他们可以过滤按价格,评级,性别和地点。
这里的问题是,价格和评级存储在模型类“注释”中,以及模特类“冒险”中的位置和性别。
在“注释”类中,外键引用“冒险”。
如何在我的filters.py中使用Django-filter 1.1.0来处理相互引用的模型“注释”和“冒险”,以根据上述参数进行筛选?
这是我的代码,但只过滤类“冒险”。如何将此代码扩展到由外部引用的参数进行筛选以返回匹配的冒险?
filters.py
import django_filters
class AdventureFilter(django_filters.FilterSet):
class Meta:
model = Adventure
fields = {
'gender',
'location',
}models.py
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,
)发布于 2018-12-03 11:18:16
这是来自医生们的一个例子
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过滤器有两个主要的论据:
注意到"__“链接,我认为您可以直接使用它,而无需在字段= []中执行这些显式的操作。
发布于 2018-12-04 10:12:34
将fields = {'gender','location',}编写为fields = {'gender','location','comments__price', 'comments__Rating'}。
https://stackoverflow.com/questions/53592160
复制相似问题