Во-первых, я предполагаю, что могу сохранить его СУХОЙ, сохранив эту проверку в определениях моей формы.
Да, я бы изложил это в форме, как выглядит выв любом случае использовать один для отображения формы?Кроме того, вы можете поместить большую часть ваших данных о форматировании даты прямо в методы clean_FIELD
, чтобы форматировать данные в диктовке cleaned_data
.Единственная проблема здесь заключается в том, что выходные данные фактически изменены, поэтому ваши пользователи увидят изменение от 1000 до 1000. В любом случае, я бы поместил эту логику в метод формы.
# makes the view clean.
if form.is_valid():
form.get_posts(request)
return response
Моя большая проблемаПрямо сейчас (помимо длины кода и явно неэффективности), я не уверен, как обрабатывать входы в мои комнаты и рабочие, которые являются выборочными формами.Если пользователь не выбирает значение, я хочу удалить эти фильтры на стороне сервера процесса.Должен ли я просто создать две отдельные условные серии поисков для этих результатов?
Объекты Q предназначены только для сложных поисков.Я не вижу необходимости в них здесь.
Я также не понимаю, зачем вам цепочки фильтров.Сначала я задавался вопросом, являются ли они m2m, но эти типы запросов (__gt/__lt
) не ведут себя по-разному, поскольку между запросами нет совпадений.
# this is more readable / concise.
# I'd combine as many of your queries as you can just for readability.
posts = Posts.objects.filter(
region__in=region,
cost__gte=min_cost,
# etc
)
Теперь, если вы хотите опциональноАргументы, я предлагаю использовать словарь аргументов ключевых слов, чтобы вы могли динамически заполнять kwargs.
keyword_arguments = {
'region__in': region,
'cost__gte': min_cost,
'cost__lt': max_cost,
'availability__gt': date_min,
'availability__lt': date_max,
}
if request.GET.get('rooms'):
keyword_arguments['rooms'] = request.GET['rooms']
if request.GET.get('workers'):
keyword_arguments['workers'] = request.GET['workers']
posts = Posts.objects.filter(**keyword_arguments)