Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Помогите реализовать динамическую фильтрацию [RSS Feed]

#1 Май 6, 2016 06:06:38

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите реализовать динамическую фильтрацию

Задача в

context["art_photo"]
class ArticleDetail(DetailView):
	#queryset            = Article.objects.all()
	model =  Article
	template_name 		= "blog/article_detail.html"
	context_object_name = "articledetail"
		
	
	#def __init__(self):
	#	self.filt = PhotoGroup().name_group		
		
	def get_context_data(self, **kwargs):
	    context = super(ArticleDetail, self).get_context_data(**kwargs)
	    context["ph"] = Profile.objects.get(id = self.kwargs["pk"])
   	    context["art_photo"] = PhotoGroup.objects.filter(name_group = "Изменяемые параметры" )
#	    context["art_photo"] = PhotoGroup.objects.filter(name_group = "GroupPhoto_article_3")
	    #context["ph"] = self.for_photo
	    return context
передавать объекты выбираемые по динамически определенным параметрам.
Параметры брать нужно из той же таблицы. Модель таблицы:
class PhotoGroup(models.Model):
	name_group = models.CharField(max_length=100)
	tag_group = models.ManyToManyField(Photo)
	def __unicode__(self):
		return  "%s "  % self.name_group

Отредактировано quix (Май 6, 2016 06:07:40)

Офлайн

#2 Май 6, 2016 06:59:26

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Помогите реализовать динамическую фильтрацию

Можно пример этих параметров? Что такое “GroupPhoto_article_3”? Если просто строка, то в чем проблема? Если же модель с полем, то что это за модель и поле?

Если под динамическими запросами имеется в виду, что заранее неизвестно какие колонки надо фильтровать, то это можно сделать так:

params = {'name_group': 'Some name'}
PhotoGroup.objects.filter(**params)



Офлайн

#3 Май 6, 2016 06:59:47

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите реализовать динамическую фильтрацию

Смотри финт:

class FilterForm(forms.Form):
     name_group__icontains = CharField()
     .....
def get_context_data(self, **kwargs):
   context = super(ArticleDetail, self).get_context_data(**kwargs)
   filter_form = FilterForm(self.request.GET)
   context["art_photo"] = PhotoGroup.objects.all()
   if filter_form.is_valid():
      context["art_photo"] = context["art_photo"].filter(**filter_form.cleaned_data)



Офлайн

#4 Май 6, 2016 07:35:44

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите реализовать динамическую фильтрацию

Мне нужно бежать на работу, вечером обязательно отвечу. Спасибо.

Офлайн

#5 Май 6, 2016 21:26:02

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите реализовать динамическую фильтрацию

FishHook
class FilterForm(forms.Form):     #определяем класс формы
    name_group__icontains = CharField()        # определяем инстанс класса и сразу __ делаем его всеядным к регистру
#вернемся к моему контексту
def get_context_data(self, **kwargs):          # поскольку **kwargs - функция принимает именованные аргументы и ссылку на инстанс
    context = super(ArticleDetail, self).get_context_data(**kwargs) # крутячая функция super (забыл что она делает)  :)
    filter_form = FilterForm(self.request.GET)             
    context["art_photo"] = PhotoGroup.objects.all()                 # выбираем все объекты PhotoGroup
    if filter_form.is_valid():                                                     # проверка формы на валидность 
        context["art_photo"] = context["art_photo"].filter(**filter_form.cleaned_data) #переопределяем уже  отфильтрованные по параметру из формы нормализованные данные

Очень здоровский пример!!!
траблу я пока не решил, так как поставленный мною вопрос был не полностью раскрыт изначально.
Вернусь через время.
Всем огромнейшее спасибо!!!

Отредактировано quix (Май 8, 2016 06:44:49)

Офлайн

#6 Май 8, 2016 07:16:20

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите реализовать динамическую фильтрацию

plusplus
Можно пример этих параметров? Что такое “GroupPhoto_article_3”? Если просто строка, то в чем проблема? Если же модель с полем, то что это за модель и поле?Если под динамическими запросами имеется в виду, что заранее неизвестно какие колонки надо фильтровать, то это можно сделать так:
class Photo(models.Model):
	ava = models.ImageField(upload_to = "ava_person")
	img_art = ImageSpecField(source = "ava",
		processors = [ResizeToFill(200, 200)],
		format = "JPEG",
		options = {"quality": 60})
	pfototag = models.SlugField(max_length=100)

class PhotoGroup(models.Model):
	name_group = models.CharField(max_length=100)
	tag_group = models.ManyToManyField(Photo)

class Article(models.Model):
 	photo       = models.ForeignKey(PhotoGroup)
“GroupPhoto_article_3” это название группы картинок, находится в поле name_group

Задача состоит в том что бы при вызове конкретной статьи о ромашке подключалась группа фотографий посвещенных ромашкам.
В чем заключается моя “динамичность”? - Я хотел во вьюшках
def __init__(self):
		self.gt_filt_data = PhotoGroup()
	
	def get_context_data(self, **kwargs):
	    context = super(ArticleDetail, self).get_context_data(**kwargs)
	    context["data"] = self.gt_filt_data.name_group
	    context["art_photo"] = PhotoGroup.objects.filter(name_group = self.gt_filt_data.name_group)
	    return context	

Офлайн

#7 Май 8, 2016 08:25:33

quix
Зарегистрирован: 2012-06-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите реализовать динамическую фильтрацию

решил

context["art_photo"] = PhotoGroup.objects.filter( article__id = self.kwargs["pk"])

Офлайн

  • Начало
  • » Django
  • » Помогите реализовать динамическую фильтрацию[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version