我想为网站的最终用户实现一个过滤器,以便他们可以按价格、评级、性别和位置进行过滤。
这里的问题是价格和评级存储在模型类“评论”中,位置和性别存储在模型类“冒险”中。
在“comment”类中,“adventure”由外键引用。
如何在filters.py 中使用 Django-filter 1.1.0 来处理相互引用的模型“评论”和“冒险”,以根据上述参数进行过滤?
这是我的代码,可以工作,但只过滤“冒险”类。如何扩展此代码以通过外部引用的参数进行过滤以返回匹配的冒险?
过滤器.py
import django_filters
class AdventureFilter(django_filters.FilterSet):
class Meta:
model = Adventure
fields = {
'gender',
'location',
}
模型.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,
)