Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как добавить к классу поле со значением из другого класса(FK)? [RSS Feed]

#1 Июль 2, 2013 22:03:27

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Как добавить к классу поле со значением из другого класса(FK)?

Есть такие классы:

class Author (models.Model):
    author = models.CharField(max_length=256)
    birthday = models.DateField()
    ...
class Book (models.Model):
    bookauthor = models.ForeignKey(author)
    book = models.CharField(max_length=512)
    published = models.DateField()
    author = ?
    ...

Как добавить к классу Book поле с значением поля author класса Author?
Это нужно что бы при сериализации выборки по таблице Book в ответ попадало имя автора.

book = Book.objects.filter(bookauthor=bookauthor)
msg =serializers.serialize("json", book, fields=("book","published","author","..."))

наверно логично было бы так, но не работает:
...
author = Author.author
...



Офлайн

#2 Июль 3, 2013 06:47:37

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

Как добавить к классу поле со значением из другого класса(FK)?

books = Book.objects.select_related('bookauthor').filter(bookauthor=bookauthor)
for b in books:
    print b.bookauthor.author



Офлайн

#3 Июль 3, 2013 06:54:55

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Как добавить к классу поле со значением из другого класса(FK)?

class Author (models.Model):
    author = models.CharField(max_length=256)
    birthday = models.DateField()
    ...
class Book (models.Model):
    bookauthor = models.ForeignKey(Author)
    book = models.CharField(max_length=512)
    published = models.DateField()
book = Book.objects.filter(bookauthor=bookauthor)
msg =serializers.serialize("json", book, fields=("book","published","bookauthor__author","..."))
а так не работает?

Отредактировано ilnur (Июль 3, 2013 06:55:11)

Офлайн

#4 Июль 3, 2013 19:35:30

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Как добавить к классу поле со значением из другого класса(FK)?

ilnur
а так не работает?
опечатка



Офлайн

#5 Июль 3, 2013 19:41:53

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Как добавить к классу поле со значением из другого класса(FK)?

FishHook
books = Book.objects.select_related('bookauthor').filter(bookauthor=bookauthor)
for b in books:
print b.bookauthor.author

я очень слабо понимаю что такое select_related(), но с этим методом ответ по прежнему содержит:

[
    ...
    {"pk": 1, "model": "book", "fields": {"bookauthor": 3, "book": "Some Book", "published": "2013-07-03"},
    ...
]

здесь “bookauthor”: 3, 3 - это id FK, ну а хочется видеть “bookauthor”: “собственно автор”. такое возможно сделать каким то простым способом не тромоша выборку всякими переброами и переводами из формата в формат?



Офлайн

#6 Июль 3, 2013 19:44:14

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Как добавить к классу поле со значением из другого класса(FK)?

kvadrat
опечатка
не понял

Офлайн

#7 Июль 3, 2013 19:56:23

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Как добавить к классу поле со значением из другого класса(FK)?

ilnur
не понял
проглядел. я думал вы указали мне на ошибку в написании класса.
то, что вы предложили вообще исключило из ответа поле “bookauthor”:


[
    ...
    {"pk": 1, "model": "book", "fields": {"book": "Some Book", "published": "2013-07-03"},
    ...
]

что не так?



Офлайн

#8 Июль 3, 2013 21:35:35

kvadrat
От:
Зарегистрирован: 2011-07-13
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Как добавить к классу поле со значением из другого класса(FK)?

вот http://djbook.ru/forum/topic/173/#post-1040
“в результате category_name пропадает в выводе simplejson. Возможно кто нибудь сможет подсказать как это лечитьсяобходиться ?”
нашел почти такую же проблему но сложнее. там товарищ создает какие-то классы сериализации свои. я этого пока совсем не понимаю. как я понял решение найдено в посте но совершенно не понимаю в чем оно.
а вообще уже третий день ищу решение в сети почти безрезультатно. неужели это такая редкая ситуация - полчить имя вместо id ?


алилуйа!!! сколько же всяких дурацких неработающих способов обхода этой проблемы можно встретить в сети! вот решение: https://docs.djangoproject.com/en/1.5/topics/serialization/#natural-keys

ну то есть это не ответ на поставленный вопрос а решение конкретной ситуации



Отредактировано kvadrat (Июль 3, 2013 22:15:39)

Офлайн

  • Начало
  • » Django
  • » Как добавить к классу поле со значением из другого класса(FK)?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version