Найти - Пользователи
Полная версия: Выбрать при соотвествии значения одному из значений ManyToManyField
Начало » Django » Выбрать при соотвествии значения одному из значений ManyToManyField
1
Mutagena
Подскажите, как реализовать выборку при соответствии значения в модели одному из значений 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")
Подскажите, как правильно быть в такой ситуации.
sairus
как вариант:
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")
хотя чувствую, что можно и одним запросом обойтись, но на вскидку не вспомню
Mutagena
sairus, но ManyToManyField не итерируем, поэтому нельзя тут использовать генератор списка.
Может ещё будут идеи?
sairus
Mutagena
sairus, но ManyToManyField не итерируем, поэтому нельзя тут использовать генератор списка.
Может ещё будут идеи?
user_category_list.categories - нет,
а user_category_list.categories.all() - да
Mutagena
sairus, точно :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB