@pydjango
Django

Полезная информация и правила: https://github.com/amureki/django_faq Вакансии и резюме: @django_jobs Пофлудить идём сюда: @django_flood Статистика чата: combot.org/chat/-1001063854692

1741 members

Архив канала @pydjango 18 января 2017 г.

06:08:24 ДП
User 188924529
Ребята у меня есть вопрос по формы, если кто то изменит аттрибут "name" в форм фиелд MultiDictValueError ошибка будет, например если я изменяю 
<input name="username" />
на 
<input name="nousername" />
Ошибка будет. Как зашитить это?
07:53:54 ДП
User 120578100
А что ты собрался защищать?
07:55:48 ДП
User 120578100
except MultiDictValueError:
    form. invalid()

?
08:01:34 ДП
User 254082535
User 120578100
А что ты собрался защищать?
Да это, имхо, чушь. Кто может на стороне бэкенда переопределить атрибуты??
08:02:34 ДП
User 120578100
Дык и я о том же
08:03:35 ДП
User 254082535
Я думаю, что он пытается в dynamic fields.
08:03:39 ДП
User 120578100
Ну захочет он name поменять,  ну вылезет ему 500. А надо что,  радугу показать?
08:03:49 ДП
User 254082535
Просто не верно задает вопрос.
08:04:27 ДП
User 120578100
Ну дождемся первоисточника
08:04:36 ДП
User 254082535
name и id - это джанга сама отдает же?
08:05:22 ДП
User 254082535
То есть, у нас, вроде в конструктор не передается это?
08:05:43 ДП
User 120578100
Ну если ты подаришь как form
08:06:19 ДП
User 120578100
Id не валидируются
08:07:34 ДП
User 254082535
А там разве вопрос о валидации? Его же нэйминг тревожит, вроде?
08:08:05 ДП
User 254082535
class PointsForm(forms.Form):
    def __init__(self, *args, **kwargs):
        extra = kwargs.pop('extra')
        tournament = kwargs.pop('tournament')
        super(PointsForm, self).__init__(*args, **kwargs)

        for team in extra:
            if tournament.single_player is False:
                self.fields['%s' % team.team_1.id] = forms.IntegerField(widget=forms.TextInput(
                        attrs={'placeholder': 'Очки', 'class': 'form-control'}))
                self.fields['%s' % team.team_2.id] = forms.IntegerField(widget=forms.TextInput(
                        attrs={'placeholder': 'Очки', 'class': 'form-control'}))
            else:
                self.fields['%s' % team.player_1.id] = forms.IntegerField(widget=forms.TextInput(
                    attrs={'placeholder': 'Очки', 'class': 'form-control'}))
                self.fields['%s' % team.player_2.id] = forms.IntegerField(widget=forms.TextInput(
                    attrs={'placeholder': 'Очки', 'class': 'form-control'}))
08:08:15 ДП
User 120578100
Нейминг головного мозга?
08:08:47 ДП
User 254082535
Я вот про что. То есть, когда мы заранее не очень знаем сколько полей у нас может быть.
08:09:21 ДП
User 254082535
Только у него name
08:10:04 ДП
User 239800743
блин ребзя вы предупреждайте когда глаза закрывать, а то больно смотреть
08:10:21 ДП
User 120578100
Обычно подобное делается через formfactory
08:11:10 ДП
User 254082535
Как вариант. Я просто предложил пример того, что он может хотеть) Филиал Бабы Ванги)
08:11:27 ДП
User 254082535
User 239800743
блин ребзя вы предупреждайте когда глаза закрывать, а то больно смотреть
Сорри, это оно САМО)))
08:12:18 ДП
User 120578100
Мой бубен в ремонте
08:12:37 ДП
User 239800743
1е правило бойцовского клуба - бить по рукам за копипасту =) иначе тех. долг бует бить в бубен
08:13:43 ДП
User 254082535
Бро, это мой код)) Гаденько, мгм. Одно из "временных решений" )
08:18:24 ДП
User 239800743
как показывает практика - нет ничего более постоянного чем временное. мне доводилось (и не раз) чинить временные решения которым по 5 лет...
08:19:14 ДП
User 239800743
ну конечно это дело каждого как писать и что, но лучше же сразу норм сделать если такое решение работает
08:21:43 ДП
User 120578100
Нет ничего долговечнее,  чем временное
08:22:59 ДП
User 254082535
Над этим я и насмехался сейчас)
На самом деле, этот костыль упразднен в пользу жыэса в шаблоне.
08:27:06 ДП
User 120578100
Блин,  в метро(( не сразу отправляется
12:16:25 ПП
User 194990550
Так, есть новость, у нее есть описание и  заголовок. Есть любой юзер, который может предложить исправить информацию в этой новости. Как такое реализовать?
12:20:42 ПП
User 254082535
Да как угодно. js комбинация клавиш, собирает выделенный текст или нужные селекторы (привязать на селекторы нужное из БД - не проблема, да), собираем это всё в какой то массив, скармливаем вьюхе в виде уведомления админу ресурса. Это если нет желания пилить кнопку.
12:22:13 ПП
User 194990550
ну, как это сделать, я примерно знаю. Мне вот больше интересно как базу спроектировать. где хранить эти изменения и как
12:23:44 ПП
User 254082535
m2m users.is_staff (или кто там у тебя имеет полномочия принимать такие сообщения) на сами запросы.
02:41:38 ПП
User 120578100
Я так понимаю нужно реализовать механизм ревизий?
02:42:43 ПП
User 194990550
Ну, например ты зашел - решил отредактировать новость и отправить ее , в Википедии вроде так
02:43:11 ПП
User 194990550
Мне вот не нравится идея менять статью полностью и сразу сохранять
02:44:04 ПП
User 126848884
У меня сейчас похожая задача. Я сделал просто — положил в Git, создал модель Transaction (для мета-полей, там много всякой доп. инфы к транзакции) и просто дергаю Git из приложения. В инстанс Transaction сохраняю идентификатор коммита.
02:45:19 ПП
User 126848884
Тут типа-B2B и производительность и лучшие практики deaign patterns мне не критичны в данном случае, ггг.
02:46:10 ПП
User 126848884
Но у меня еще полно файлов, не только текст. В целом стейт файлового дерева надо сохранять.
02:47:13 ПП
User 120578100
Проще сделать отдельную модель для ревизии с релейшеном на новость и  булевым полем на апрув
02:48:01 ПП
User 120578100
+ сигнал на пост_сейв если апрув в Тру, то проапдейтить новость
02:49:06 ПП
User 120578100
сообщение для администрации выводить с помощью какой нить difflib
02:52:51 ПП
User 194990550
http://django-reversion.readthedocs.io/en/stable/index.html думаю попробовать через это реализовать
03:36:11 ПП
User 239800743
учти что она знает только за стандартные джанго модели
03:36:27 ПП
User 239800743
если у тебя поверх какой-то функционал - оно не будет знать как с ним работать
03:37:22 ПП
User 239800743
и при восстановлении - оно восстановит все что было в ревизии включая FK и если фк не будет на момент восстановления - получишь интегрити эррор
03:38:43 ПП
User 254082535
Мне вариант с гитом понравился. Возьму на заметку, если что то подобное будет нужно.
03:38:46 ПП
User 239800743
а если восстановишь все сразу - то оно заафектит все, и ты получишь по факту фк обьект из ревизии другого обьекта, и данные могут (и в 95% случаев будут) различатся
03:40:28 ПП
User 254082535
Не знаю, мне в любом случае кажется оверхедом тащить целый пакет для того, чтобы хранить 2 состояния записи и нотайс.