
Romka
30.01.2017
22:01:04
Всем привет
Как правильно организовать модель закладок в книге?
Есть такая модель, но с ней очень много проблем, во views.py из метода get_bookmarks нужно передать на страницу - название, автора, картинку и id книги(это лежит в модели Book)
class UserBookmark(models.Model):
user_id = models.IntegerField()
book_id = models.IntegerField()
page_id = models.IntegerField()
Django

Denis
30.01.2017
22:02:52
models.ForeignKey пробовал?

Google

Romka
30.01.2017
22:03:20
я не знаю как его сюда прикрутить

Denis
30.01.2017
22:03:35
models.ForeignKey('Book')?
User, видимо, туда же

Romka
30.01.2017
22:04:36
ок, сейчас попробую

Denis
30.01.2017
22:15:06
Page есть в модели или это просто число?

Romka
30.01.2017
22:15:16
просто число

Denis
30.01.2017
22:15:22
Тогда оставь
Я бы его тогда назвал page_number, но не суть

Romka
30.01.2017
22:16:40
А как мне удобно его использовать?
У меня на странице с закладками юзера должно показывать книгу и все закладки к ней
я когда делаю UserBookmark.objects.filter(user_id=request.user.id) то мне дает их тучу, и я хз как его вывести
как передать в render()*

Denis
30.01.2017
22:18:36
Сделай .all(), будет список

Google

Denis
30.01.2017
22:18:43
Его передай в шаблон

Romka
30.01.2017
22:19:23
мне нужно для конкретного пользователя
в таблице лежат все закладки всех пользователей, поэтому я через .filter()

Denis
30.01.2017
22:20:07
.filter(...).all()

Romka
30.01.2017
22:20:51
сейчас скину скрин как это должно быть на странице

Denis
30.01.2017
22:22:10
На странице что-то вроде
{% for bookmark in books %}
{{ bookmark.book.name }} {{ bookmark.page_id }}
{% endfor %}

Romka
30.01.2017
22:24:30

Denis
30.01.2017
22:25:21
Ну тогда во вьюшке после получения закладок сгруппируй по книгам

Romka
30.01.2017
22:26:56
вот это я и не знаю как сделать

Denis
30.01.2017
22:27:39
Создаешь словарь {книга: список закладок} и циклом заполняешь

Romka
30.01.2017
22:34:15
спасибо, попробую
Создаешь словарь {книга: список закладок} и циклом заполняешь
Такс, а как получить номера страниц?
{<Book: Twilight>: <QuerySet [<UserBookmark: UserBookmark object>]>, <Book: Murder Is No Joke>: <QuerySet [<UserBookmark: UserBookmark object>, <UserBookmark: UserBookmark object>, <UserBookmark: UserBookmark object>, <UserBookmark: UserBookmark object>, <UserBookmark: UserBookmark object>, <UserBookmark: UserBookmark object>]>}Это переменная result

Denis
30.01.2017
22:52:39
Они в закладках хранятся

Romka
30.01.2017
22:52:48
Когда делаю {% for book in result %} и потом {{book.title}}
то норм
как их пройти циклом?

Denis
30.01.2017
22:53:29
А потом for bookmark in что-то, синтаксис не помню

Romka
30.01.2017
22:53:59
и я не помню

Denis
30.01.2017
22:56:52
http://stackoverflow.com/questions/1275735/how-to-access-dictionary-element-in-django-template

Romka
30.01.2017
23:02:48
не понял

Google

Romka
30.01.2017
23:03:54

Denis
30.01.2017
23:04:17
Второй ответ

53r63rn4r
30.01.2017
23:05:22
Бля, как отследить директорию с которого файл вызывается?
os.path.dirname(__file__)
Типа этого, только мне надо это же получить в том классе, в котором я должен оттолкнуться от того path с которого идет вызов
Чо, никто не знает?

Stanislav
30.01.2017
23:07:07

Denis
30.01.2017
23:09:47
sys.argv[0]

53r63rn4r
30.01.2017
23:11:03
Да, точно, часа два с этим писал назад, спасибо

Romka
30.01.2017
23:16:45
{% for book, page in result.items%} {{page.page_id}} - ничего не выводит
{% for book, page in result.items%} {{page}} - выводит -

Denis
30.01.2017
23:17:25
for book, bookmarks in result.items
for bookmark in bookmarks

Romka
30.01.2017
23:21:08

53r63rn4r
30.01.2017
23:23:00
А с mock никто не работал?
С патчем

Denis
30.01.2017
23:23:15
unittest.mock который?

53r63rn4r
30.01.2017
23:23:17
Да

Denis
30.01.2017
23:23:21
Ну я работал

53r63rn4r
30.01.2017
23:23:53
У меня в тестс директории лежит файлик тест, лежит и файл __инит__(пустой)
class ParserTestCase(unittest.TestCase):
@mock.patch('tests')
def setUp(self):
self.name = 'test_config'
self.p = Parser(self.name)

Google

53r63rn4r
30.01.2017
23:24:21
AttributeError: <module 'tests' from 'D:\\Python\\OpenSourceProjects\\somescripts\\tests\\__init__.py'> does not have the attribute ''

Denis
30.01.2017
23:24:34
patch для сетапа?
Зачем?

53r63rn4r
30.01.2017
23:24:54
А как тогда мне директорию указать, у меня там с этим траблы

Denis
30.01.2017
23:25:11
Где указать?

53r63rn4r
30.01.2017
23:25:18
Если не патчу, то
open(os.path.dirname(sys.argv[0]) + '/' + self.config, 'r').close()
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Program Files (x86)\\JetBrains\\PyCharm 171.2014.23\\helpers\\pycharm/test_config.json'
Оно вызывает с под пучарма
И пытается прилепить то что я хочу
Ы

Admin
ERROR: S client not available

Denis
30.01.2017
23:26:07
Мб это не в сетапе, а в тесте должно быть?

53r63rn4r
30.01.2017
23:27:40
Не-а, в сетапе я инициализирую тестируемый класс и туда же передаю сразу путь к конфигу(пыаюсь его распарсить)

Denis
30.01.2017
23:27:56
А что такое tests?

53r63rn4r
30.01.2017
23:27:59
И тот вариант с sys.argv[0] работает мутно для меня в данном случае
Ну, тесты

Denis
30.01.2017
23:28:34
Обычно делают mock.patch('unit.name', some_object)
И он добавляет параметр в функцию

53r63rn4r
30.01.2017
23:30:44
А что за юнит нэйм и некий обьект?

Denis
30.01.2017
23:31:11
Суть патча в том, что он заменяет некоторый объект в некотором юните

Google

Denis
30.01.2017
23:31:29
Либо на Mock, либо на то, что ты ему передашь

53r63rn4r
30.01.2017
23:32:24
Хм...
Т.е. код не менять, а мок пихать путь относительный тестов, да?
Сука, а я пытаюсь код под тесты подстроить, ло

Denis
30.01.2017
23:33:07
Я вообще не понял, при чем тут путь

53r63rn4r
30.01.2017
23:33:30
Ну, есть скрипт, лежащий отдельно, в модуле
Есть тот скрипт, который вызывает этот модуль и просто передает в него имя файла-конфига
Конфиг рядом, вотъ
Но что-то я не могу гибко построить

Denis
30.01.2017
23:34:11
Ну ты из тестов импортишь его и передаешь что надо

53r63rn4r
30.01.2017
23:34:33
Ну я в тестах его импорчу, но у меня тесты крашатся из-за несоответсвия путей

Denis
30.01.2017
23:34:50
Как насчет кинуть их в ту же папку?

53r63rn4r
30.01.2017
23:35:03
Не хочу
Тогда оно будет не гибко

Denis
30.01.2017
23:35:27
Создаешь в своем проекте папку tests, все тесты туда

53r63rn4r
30.01.2017
23:35:56
Я так и сделал

Denis
30.01.2017
23:36:58
Вот из моего старого кода
#!/usr/bin/python3
import unittest
import os
this_dir = os.path.join(os.path.dirname(__file__), 'tests')
tests = unittest.defaultTestLoader.discover(start_dir=this_dir, pattern='*_test.py')
base = unittest.TestResult()
tests.run(base)

53r63rn4r
30.01.2017
23:39:02
А, ты так, а я думал тесты с прям тестс вызывать, но всё равно это не то
В папке тестс лежит тестовый конфиг типа, т.е. я должен ж оттолкнуться как-то от того "ГДЕ Я", так же?

Denis
30.01.2017
23:40:15
Наверно

53r63rn4r
30.01.2017
23:40:59
Вот и я хз как решить эту ебаную проблему с путями
Или сделать более менее и прикрутить аргпарс?
Это решит проблему с консоли
Эта группа больше не существует