Найти - Пользователи
Полная версия: Как добавить к классу поле со значением из другого класса(FK)?
Начало » Django » Как добавить к классу поле со значением из другого класса(FK)?
1
kvadrat
Есть такие классы:

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
...
FishHook
books = Book.objects.select_related('bookauthor').filter(bookauthor=bookauthor)
for b in books:
    print b.bookauthor.author
ilnur
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","..."))
а так не работает?
kvadrat
ilnur
а так не работает?
опечатка
kvadrat
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”: “собственно автор”. такое возможно сделать каким то простым способом не тромоша выборку всякими переброами и переводами из формата в формат?
ilnur
kvadrat
опечатка
не понял
kvadrat
ilnur
не понял
проглядел. я думал вы указали мне на ошибку в написании класса.
то, что вы предложили вообще исключило из ответа поле “bookauthor”:


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

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


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

ну то есть это не ответ на поставленный вопрос а решение конкретной ситуации
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