Я бы хотел внедрить фильтр для конечного пользователя сайта, чтобы он мог фильтровать по цене, рейтингу, полу и местоположению.
Проблема в том, что цена и рейтинг хранятся вкласс модели "комментарий", а также расположение и пол в классе моделей "приключение".
В классе "комментарий" ссылка на "приключение" осуществляется по внешнему ключу.
Как можноЯ использую Django-фильтр 1.1.0 в моем файле filters.py, чтобы обратиться к обеим моделям «комментарий» и «приключение», которые ссылаются друг на друга, для фильтрации в соответствии с вышеупомянутыми аргументами?
Вот мой код, который работает, но только фильтры класса "приключение".Как я могу расширить этот код, чтобы также фильтровать по внешним ссылочным аргументам, чтобы возвращать совпадающие приключения?
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,
)