Найти - Пользователи
Полная версия: как обратиться обратиться к полю одной модели через ForeingKey другой модели
Начало » Django » как обратиться обратиться к полю одной модели через ForeingKey другой модели
1
buddha
Здравствуйте, хочу в блоге выводить посты по катерогиям. Для этого собираюсь вставить простое условие на сравнение принадлежности к существующим значениям категорий(два значения:common, develop).
модели:
class clsCategories(models.Model):
    category=models.CharField(max_length=50)
    def __unicode__(self):
        return self.category
class BlogPost(models.Model):
    title=models.CharField(max_length=150)
    body=models.TextField(blank=False)
    timestamp=models.DateTimeField()
    category=models.ForeignKey(clsCategories)
    image=models.ImageField(upload_to='image', blank=True)

пока пробую код в shell:
from blog.models import BlogPost
z=BlogPost.objects.all()
z.filter(category='common')

Столкнулся с обишкой:
ValueError: invalid literal for int() with base 10: ‘common’
Понял, что с полем типа ForeignKey нужно как то по особомую
Подскажите пожалйуста, как из результата запроса(в переменной z) достать записи БД по категориям(category='common',category='develop') .
barabansheg
Вот так:
from blog.models import BlogPost, clsCategories
categ = clsCategories.objects.get(category = 'common')
z=BlogPost.objects.all()
z.filter(category=categ)

А лучше наверно запрос сделать таким:
z=BlogPost.objects.filter(category=categ)
buddha
Согласен, таким путем пойти проще.
Интуиция подсказывает, что есть еще и метод непосредстенного обращения через поле ForeignKey.
Буду искать в оф. документации.

За ответ спасибо)
Chern
Строка:
z.filter(category='common')
это тоже самое что и
z.filter(category__pk='common')

В Вашем случае необходимо указывать поле category:
z.filter(category__category='common')

fashust
z.clscategories_set.all()
z.clscategories_set.filter()

Как-то так.
buddha
Это отрабатывает как нужно. Читану про модели в документациию
Chern
В Вашем случае необходимо указывать поле category:
z.filter(category__category='common')

А вот clscategoried_set почему то не появлется , разберусь… Подобное делал.
fashust
z.clscategories_set.all()
z.clscategories_set.filter()

спасибо
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