Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Выбрать при соотвествии значения одному из значений ManyToManyField [RSS Feed]

#1 Фев. 11, 2010 11:40:35

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбрать при соотвествии значения одному из значений ManyToManyField

Подскажите, как реализовать выборку при соответствии значения в модели одному из значений ManyToManyField по результатам прошлой выборки.
Например:
модель:

class Category(models.Model):
...
category = models.CharField(max_length=70)

def __unicode__(self):
return self.category

class Project(models.Model):
...
category = models.ForeignKey(Category)
freelance_site = models.ForeignKey(FreelanceSite)

def __unicode__(self):
return self.title

class UsersCategory(models.Model):
user = models.ForeignKey(User)
categories = models.ManyToManyField(Category, verbose_name='Категории')

def __unicode__(self):
return self.user.username
Мой вариант выборки (проблема в последней строке):
user_category_list = UsersCategory.objects.get(user=request.user)
f_site = FreelanceSite.objects.get(id=site_id)
project_list = Project.objects.filter(freelance_site=f_site,category=user_category_list.categories).order_by("-pub_date")
Подскажите, как правильно быть в такой ситуации.



Офлайн

#2 Фев. 12, 2010 05:20:06

sairus
От:
Зарегистрирован: 2007-10-08
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбрать при соотвествии значения одному из значений ManyToManyField

как вариант:

ids = [cathegory.id for cathegory in user_category_list.categories] # В общем, перебираем все категории и вносим их id в список
project_list = Project.objects.filter(freelance_site=f_site,category__id__in=ids).order_by("-pub_date")
хотя чувствую, что можно и одним запросом обойтись, но на вскидку не вспомню



Отредактировано (Фев. 12, 2010 05:20:34)

Офлайн

#3 Фев. 12, 2010 08:37:07

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбрать при соотвествии значения одному из значений ManyToManyField

sairus, но ManyToManyField не итерируем, поэтому нельзя тут использовать генератор списка.
Может ещё будут идеи?



Офлайн

#4 Фев. 12, 2010 12:52:47

sairus
От:
Зарегистрирован: 2007-10-08
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбрать при соотвествии значения одному из значений ManyToManyField

Mutagena
sairus, но ManyToManyField не итерируем, поэтому нельзя тут использовать генератор списка.
Может ещё будут идеи?
user_category_list.categories - нет,
а user_category_list.categories.all() - да



Офлайн

#5 Фев. 12, 2010 13:01:41

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбрать при соотвествии значения одному из значений ManyToManyField

sairus, точно :)



Офлайн

  • Начало
  • » Django
  • » Выбрать при соотвествии значения одному из значений ManyToManyField[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version