Уведомления

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

#1 Май 7, 2012 18:25:31

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

как обратиться обратиться к полю одной модели через ForeingKey другой модели

Здравствуйте, хочу в блоге выводить посты по катерогиям. Для этого собираюсь вставить простое условие на сравнение принадлежности к существующим значениям категорий(два значения: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') .

Офлайн

#2 Май 8, 2012 00:55:24

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

как обратиться обратиться к полю одной модели через ForeingKey другой модели

Вот так:

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)



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#3 Май 8, 2012 08:23:50

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

как обратиться обратиться к полю одной модели через ForeingKey другой модели

Согласен, таким путем пойти проще.
Интуиция подсказывает, что есть еще и метод непосредстенного обращения через поле ForeignKey.
Буду искать в оф. документации.

За ответ спасибо)

Офлайн

#4 Май 8, 2012 09:08:30

Chern
От: Киев
Зарегистрирован: 2010-09-15
Сообщения: 71
Репутация: +  3  -
Профиль   Отправить e-mail  

как обратиться обратиться к полю одной модели через ForeingKey другой модели

Строка:

z.filter(category='common')
это тоже самое что и
z.filter(category__pk='common')

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



Офлайн

#5 Май 8, 2012 09:41:34

fashust
От:
Зарегистрирован: 2011-07-17
Сообщения: 30
Репутация: +  3  -
Профиль   Отправить e-mail  

как обратиться обратиться к полю одной модели через ForeingKey другой модели

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

Как-то так.



import this

Офлайн

#6 Май 8, 2012 11:03:22

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

как обратиться обратиться к полю одной модели через ForeingKey другой модели

Это отрабатывает как нужно. Читану про модели в документациию

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

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

спасибо

Отредактировано buddha (Май 8, 2012 11:03:41)

Офлайн

  • Начало
  • » Django
  • » как обратиться обратиться к полю одной модели через ForeingKey другой модели[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version