Goods.objects.annotate(
PriceGroups_id_1_price = Subquery(Price.objects.filter(goods_id=OuterRef('id'), pricegroup_id=1).values('price')[:1]),
PriceGroups_id_2_price = Subquery(Price.objects.filter(goods_id=OuterRef('id'), pricegroup_id=2).values('price')[:1]),
PriceGroups_id_3_price = Subquery(Price.objects.filter(goods_id=OuterRef('id'), pricegroup_id=3).values('price')[:1]),
)
group_count = 3
subquery = Subquery(Price.objects.filter(goods_id=OuterRef('id')))
qs = Goods.objects.annotate(
**{
f'PriceGroups_id_{group_id}_price': subquery.filter(pricegroup_id=group_id).values(
'price')[:1]
for group_id in range(1, group_count + 1)
}
)
def changelist_view(self, request, extra_context=None):
return HttpResponseRedirect(url_страницы_редактирования_единственной_сущности)
# ... Где-то здесь определяем quryset как нефильтрованный набор
title = request.GET.get('title')
price_min = request.GET.get('price_min')
price_max = request.GET.get('price_max')
if title:
quryset = quryset.filter(title=title)
if price_min and price_max:
quryset = quryset.filter(price__range=(price_min, price_max))
elif price_min:
quryset = quryset.filter(price__gte=price_min)
elif price_max:
quryset = quryset.filter(price__lt=price_max)
quryset =
def get_queryset(self):
if not self.request.GET:
return Posts.objects.all()#если нет параметров, просто возвращаем все посты
keyword = self.request.GET.get('key')#получаем ключевое слово
filters = Q()#создаем первый объект Q, что бы складывать с ним другие
for key in ['author', 'name', 'text']:
value = self.request.GET.get(key)
if value:
filters |= Q(**{f'{key}__icontains': keyword})
return Posts.objects.filter(filters)
path('bio/<username>/', views.bio, name='bio')
# или
re_path(r'^bio/(?P<username>\w+)/$', views.bio, name='bio')
# ...
class ValidationForm(ModelForm):
class Meta:
model = model_cls
fields = (field_name, )
params = {field_name: field_value}
form = ValidationForm(params)
if form.is_valid():
field_value = form.cleaned_data[field_name]
# ...
row = model_cls.objects.get(id = row_id)
if hasattr(row, field_name):
row.__setattr__(field_name, field_value)
row.save()
# ...