Как правильно вынести бизнес-логику из вьюх, если они представлены базовыми классами?

|
Зорин ITшник 2022-06-25 13:06:57
Сделал
NickPlotnikov 2022-06-25 13:07:01
гугли slag django, слаг это уникальный урл
Зорин ITшник 2022-06-25 13:07:15
Я знаю
NickPlotnikov 2022-06-25 13:07:18
делай поле slag
NickPlotnikov 2022-06-25 13:07:28
и в серии и в фильме
Зорин ITшник 2022-06-25 13:07:43
А поле серий, это чар филд?
Зорин ITшник 2022-06-25 13:08:01
NickPlotnikov 2022-06-25 13:07:18
делай поле slag

А понял

NickPlotnikov 2022-06-25 13:08:44
ну и рул тут
https://proproprogs.ru/django/dobavlyaem-slagi-slug-k-url-adresam

#12. Добавляем слаги (slug) к URL-адресам | Django урокиproproprogs.ru
Узнаете что такое слаг (slug), зачем нужен и как его определять в классах моделей через SlugField. Функция get_object_or_404() для получения записи из таблицы. Автоматическое формирование слага в админ-панели (атрибут prepopulated_fields).
NickPlotnikov 2022-06-25 13:09:02
гугли, дальше по слагу собираешь из базы во вьюхе и выплевываешь в шаблон, все.
Зорин ITшник 2022-06-25 13:09:38
Выплевывать в шаблоне не знаю как
Зорин ITшник 2022-06-25 13:10:44
Я в вьюхе функциями пишу, мне в аргументах передать как.
(request, slug, season, serie)?
NickPlotnikov 2022-06-25 13:10:46
Гугли Django context
NickPlotnikov 2022-06-25 13:11:28
Ну слаг не нужно. сизон и серие это и есть слаг
Зорин ITшник 2022-06-25 13:11:57
Но так у меня и название фильма слаг
Зорин ITшник 2022-06-25 13:12:14
Фильм слаг, сезон слаг, серия слаг
ne1ega1 2022-06-25 13:13:27
ребят, подскажите почему возникает ошибка get() got an unexpected keyword argument ‘pk’?
ne1ega1 2022-06-25 13:14:39
truedjangochannel-128912.jpg

s7tirlitz 2022-06-25 13:18:00
Зорин ITшник 2022-06-25 13:12:14
Фильм слаг, сезон слаг, серия слаг

геншинер, привет

n1ggative_mood 2022-06-25 13:23:15
Ramz_21 2022-06-25 12:36:40

….. Нет слов, одни эмоции

Зорин ITшник 2022-06-25 13:31:06
s7tirlitz 2022-06-25 13:18:00
геншинер, привет

Я не геншинер, привет

s7tirlitz 2022-06-25 13:31:41
Зорин ITшник 2022-06-25 13:31:06
Я не геншинер, привет

окей, дед просто натолкнул на эту мысль

Зорин ITшник 2022-06-25 14:04:18
NickPlotnikov 2022-06-25 13:02:53
Ну делаешь модель серии со связью 1 ко многим к модели фильм.

Во вьюхе собираешь серии и фильм и кидаешь в контекст

ну урл по шаблону, еще тебе нужно slag в модели сделать

все тут штатно и стандартно

Николай, как второй пункт через цикл генерить в швблоне?

NickPlotnikov 2022-06-25 14:16:10
Зорин ITшник 2022-06-25 14:04:18
Николай, как второй пункт через цикл генерить в швблоне?

ну так и гугли, цикл в шаблоне Django

jonny1438 2022-06-25 14:27:36
ne1ega1 2022-06-25 13:13:27
ребят, подскажите почему возникает ошибка get() got an unexpected keyword argument ‘pk’?

У Класса Question есть pk?

jonny1438 2022-06-25 14:30:27
Скорее всего надо использовать id
ne1ega1 2022-06-25 14:36:22
jonny1438 2022-06-25 14:30:27
Скорее всего надо использовать id

суть в том что эта конструкция работает в другом классе, где я передаю пост-запрос, а здесь я пытаюсь переопределить гет, мне нужен экземпляр класса Question чтобы передать его дальше, шаблоны на нем завязаны

ne1ega1 2022-06-25 14:38:53
Я не могу понять, почему при пост запросе работает, а при гет — нет. Мне кажется все очень просто, но все равно туплю
Дима Коваль 2022-06-25 14:40:47
ne1ega1 2022-06-25 13:13:27
ребят, подскажите почему возникает ошибка get() got an unexpected keyword argument ‘pk’?

А как у тебя выглядит урл, по которому ты обращаешься к этой вьюхе?

ne1ega1 2022-06-25 14:42:59
Дима Коваль 2022-06-25 14:40:47
А как у тебя выглядит урл, по которому ты обращаешься к этой вьюхе?

path(‘<int:pk>/’, DetailsView.as_view(), name=’detail’),

ne1ega1 2022-06-25 14:44:03
у меня она была DetailsView, но я хочу реализовать логику что если чувак отвечал на этот вопрос, то его перекидывает на страницу с результатами выводя ошибку что он уже голосовал, а если нет, то просто предлагает варианты ответа и он голосует
ne1ega1 2022-06-25 14:44:50
получается мне нужно переопределить метод get(), для этого я унаследовался от TemplateView и пытаюсь это сделать
Дима Коваль 2022-06-25 14:44:50
Ну вот твой pk. В урле. Передаешь ты pk, а принимаешь во вьюхе что то другое
Дима Коваль 2022-06-25 14:45:19
ne1ega1 2022-06-25 14:44:03
у меня она была DetailsView, но я хочу реализовать логику что если чувак отвечал на этот вопрос, то его перекидывает на страницу с результатами выводя ошибку что он уже голосовал, а если нет, то просто предлагает варианты ответа и он голосует

Это не имеет никакого отношения к твоей ошибке

Romiss_s 2022-06-25 14:45:44
ne1ega1 2022-06-25 14:42:59
path(‘<int:pk>/’, DetailsView.as_view(), name=’detail’),

Тогда в get будет pk а не question_id

ne1ega1 2022-06-25 14:46:16
мне нужно и то и другое
ne1ega1 2022-06-25 14:46:28
но question_id я передаю через шаблон
ne1ega1 2022-06-25 14:47:10
truedjangochannel-128932.jpg

Romiss_s 2022-06-25 14:47:32
Ты именование в урл задал как pk
ne1ega1 2022-06-25 14:48:07
Romiss_s 2022-06-25 14:47:32
Ты именование в урл задал как pk

а как тогда надо?

ne1ega1 2022-06-25 14:48:31
а, я примерно понял, секунду
Дима Коваль 2022-06-25 14:48:43
Слу, ответ на твой вопрос — ты в функции get ожидаешь одни аргументы, а передаешь туда другие. Сделай их одинаковыми. Хоть 10 штук, названия должны быть у всех 10 одинаковые
Romiss_s 2022-06-25 14:49:07
def get(request, pk):
question = get_object_or_404(Qustion, pk=pk)
ne1ega1 2022-06-25 14:49:12
все, я понял ребят, в урлах вместо pk надо было question_id
ne1ega1 2022-06-25 14:49:26
Romiss_s 2022-06-25 14:49:07
def get(request, pk):
question = get_object_or_404(Qustion, pk=pk)

ну или так

Дима Коваль 2022-06-25 14:49:48
А что там у тебя в темплейте — вообще к вызову вьюхи ее имеет значения
ne1ega1 2022-06-25 14:49:51
спасибо большое! все как всегда элементарно, а сижу туплю уже час и не понимаю нифига))
Zzzdaq 2022-06-25 23:01:11
Добрый вечер хочу наложить на модель constraint c такой логикой:

class Meta:
constraints = [
models.CheckConstraint(check=
(Q(game_creator=True) & ~Q(player_x_session=None)) |
(Q(game_creator=False) & ~Q(player_x_session=None))
, name=»CREATOR_HAVE_SESSION»)
]

Выглядит ужасно. SQL выглядит так:

CONSTRAINT «CREATOR_HAVE_SESSION» CHECK (((«game_creator» AND NOT («player_x_session_id» IS NULL
)) OR (NOT «game_creator» AND NOT («player_x_session_id» IS NULL)))));

Думаю, X NOT NULL« было бы лучше, чем «`NOT (X IS NULL)
Вопрос — как такое ограничение правильно наложить на модель?

ne1ega1 2022-06-25 23:18:32
Добрый вечер господа! Подскажите пожалуйста как правильно вынести бизнес-логику из вьюх, если они представлены базовыми классами?
NikolayCherniy 2022-06-25 23:24:55
Zzzdaq 2022-06-25 23:01:11
Добрый вечер хочу наложить на модель constraint c такой логикой:

class Meta:
constraints = [
models.CheckConstraint(check=
(Q(game_creator=True) & ~Q(player_x_session=None)) |
(Q(game_creator=False) & ~Q(player_x_session=None))
, name=»CREATOR_HAVE_SESSION»)
]

Выглядит ужасно. SQL выглядит так:

CONSTRAINT «CREATOR_HAVE_SESSION» CHECK (((«game_creator» AND NOT («player_x_session_id» IS NULL
)) OR (NOT «game_creator» AND NOT («player_x_session_id» IS NULL)))));

Думаю, X NOT NULL« было бы лучше, чем «`NOT (X IS NULL)
Вопрос — как такое ограничение правильно наложить на модель?

так, у тебя очень странное условие, по сути ты дублируешь «player_x_session_id» IS NULL и при этом у тебя game_creator это тру или фолс, ты уверен что правильно сформулировал?

Zzzdaq 2022-06-25 23:29:08
NikolayCherniy 2022-06-25 23:24:55
так, у тебя очень странное условие, по сути ты дублируешь «player_x_session_id» IS NULL и при этом у тебя game_creator это тру или фолс, ты уверен что правильно сформулировал?

Ай, во второй части «И» должно быть

player_y_session=None

class Meta:
constraints = [
models.CheckConstraint(check=
(Q(game_creator=True) & ~Q(player_x_session=None)) |
(Q(game_creator=False) & ~Q(player_y_session=None))
, name=»CREATOR_HAVE_SESSION»)
]

CONSTRAINT «CREATOR_HAVE_SESSION» CHECK (((«game_creator» AND NOT («player_x_session_id» IS NULL
)) OR (NOT «game_creator» AND NOT («player_y_session_id» IS NULL)))));

|