@pydjango
Django

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

1741 members

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

06:48:38 ДП
User 149595952
User 191376311
Для vk.com
Посмотри еще django-allauth. Может подойдет.
07:41:13 ДП
User 125881721
Ребята, привет. А покидайте, пожалуйста, ссылки на региональные сообщества питонистов :) Ссылки на группы ВК, сайты и т.п.
09:00:25 ДП
User 111616579
http://spbpython.guru/
spbpython.guru
SPb Python — Сообщество Python программистов Санкт-Петербурга
09:06:48 ДП
User 2895769
User 111616579
http://spbpython.guru/
spbpython.guru
SPb Python — Сообщество Python программистов Санкт-Петербурга
если это реклама - давайте обратную ссылку на нас
09:07:13 ДП
User 111616579
User 2895769
если это реклама - давайте обратную ссылку на нас
это ответ Ринату
09:08:58 ДП
User 80819351
User 125881721
Ребята, привет. А покидайте, пожалуйста, ссылки на региональные сообщества питонистов :) Ссылки на группы ВК, сайты и т.п.
тебе какой регионн?
09:10:14 ДП
User 100243492
А такое же имеется по фласку:\?
10:45:18 ДП
User 125881721
User 80819351
тебе какой регионн?
Да любой
10:45:55 ДП
User 80819351
python.su  )))
10:46:39 ДП
User 80819351
.su + страны СНГ
10:46:48 ДП
10:47:07 ДП
User 125881721
Татьяна прислала пример. Вот такое имелось ввиду
01:14:06 ПП
User 226624052
Ребзя, перегоняю с документарной в постгрес
01:14:07 ПП
User 226624052
Как лучше жсоны обрабатывать?
01:14:07 ПП
User 226624052
А-то у меня получаются такие жирные модельки
01:14:08 ПП
01:14:08 ПП
01:15:02 ПП
User 126848884
Ну там <json>-то нативно поддерживается. Не?
01:15:12 ПП
User 119702721
User 226624052
Как лучше жсоны обрабатывать?
jsonb field
01:15:41 ПП
User 226624052
Потом мне надо будет выгружать с бд в xls, не скажется ли это на производительность?
01:16:26 ПП
User 119702721
User 226624052
Потом мне надо будет выгружать с бд в xls, не скажется ли это на производительность?
На производительности чего?
01:16:42 ПП
User 226624052
формирования отчетов
01:17:44 ПП
User 119702721
Нам-то откуда знать, какие у тебя там отчёты и как ты их формируешь?
01:18:12 ПП
User 226624052
Ну да, ты прав
01:19:04 ПП
User 226624052
А hstorefield - не годится?
01:22:24 ПП
User 119702721
User 226624052
А hstorefield - не годится?
Годится. Но если тебе нужно json поле и ты используешь Postgresql, которая нативно умеет в json, и ты используешь django, который умеет в json в связке с postgresql, то зачем тебе hstorefield?
01:23:02 ПП
User 226624052
хз, просто спрашиваю.
01:23:43 ПП
User 226624052
Ну в жсоне будет не видно что там лежит.. =\ Но, да, избавит от кучи полей
01:24:17 ПП
User 226624052
Просто в документарной бд в джейсонах хранится-то всё
01:24:26 ПП
User 226624052
А я перетягиваю для производительности
01:25:52 ПП
User 226624052
Будет ли это решение лучшим для меня? Хранить в постгресе в жсонах, а потом опять распарсивать жсон и собирать документ
01:26:11 ПП
User 226624052
Вот в чем сложность
01:26:45 ПП
User 107485588
как ты определил что у тебя затык с производительностью на уровне базы?
01:27:11 ПП
User 226624052
ну я геты вижу, замеры делал
01:27:26 ПП
User 226624052
couchdb написана на этом..
01:27:29 ПП
User 226624052
на ерланге, во
01:27:40 ПП
User 226624052
Я пробовал и локально
01:29:54 ПП
User 107485588
а в базе пробовал свои запросы выполнять? без прослойки в виде джанги
01:30:01 ПП
01:30:23 ПП
User 226624052
с библиотекой pycouchdb
01:30:49 ПП
User 226624052
Хрень, у меня там к одному юзеру привязано минимум 4 документа = 4 гета
01:32:12 ПП
User 226624052
А юзеров 30к около, один гет проходит по разному: от 0.8 секунд до 1.8
01:33:00 ПП
User 226624052
А с постгрес берет просто всю пачку, например и просто распихивает и всё
01:33:12 ПП
User 226624052
один селект и там зависит уже от питона
01:34:28 ПП
User 107485588
http://docs.couchdb.org/en/2.0.0/couchapp/views/joins.html
01:34:31 ПП
User 107485588
не подходит?
01:35:29 ПП
User 226624052
Подходит, так я с учетом этого и вот как бы э..
01:35:42 ПП
User 226624052
Всё равно не то(по скорости)
01:35:53 ПП
User 226624052
Так у меня за 180 секунд отчет генерится
01:35:58 ПП
User 226624052
А так - 6-8 часов
01:37:20 ПП
User 226624052
По этому, ищу как можно более гибкое решение, но уже нашел
01:37:36 ПП
User 226624052
Спасибо @hulygun
01:38:26 ПП
User 226624052
Вот к этому совету я пришел, афк реализовывать
01:38:26 ПП
User 226624052
Если не надо будут фильтры и поиск по этим полям, то можешь спокойно хранить в jsonfield
01:38:26 ПП
User 226624052
Ага, значит мне надо этот жсон ещё отсеять, сформировать тот, который устроит и впихнуть в бд
01:38:27 ПП
User 226624052
Ну, я примерно так и думал(в целом)
01:38:27 ПП
User 226624052
а для массовой выгрузки юзай генераторы... значительно снимет нагрузку
01:38:28 ПП
User 226624052
Ну ты ж получаешь словарь? то что нужно в модель через .pop('key')
01:38:28 ПП
User 226624052
Что останется - целиком в json
03:47:47 ПП
User 188924529
Привет всем!!!
03:48:45 ПП
03:49:32 ПП
User 188924529
Как использовать ModelChoiceField queryset с филтром
03:51:18 ПП
User 48374918
Не совсем понял
03:52:06 ПП
User 188924529
Я хочу исползоват так ModelChoiceField(queryset = SomeModel.objects.filter(...))
03:53:47 ПП
User 188924529
class LessonForm(forms.ModelForm):
  def __init__(self, *args, **kwargs):
    blogger = kwargs.pop('blogger')
    super(LessonForm, self).__init__(*args, **kwargs)
    self.fields['tutorial'].queryset = Tutorial.objects.filter(author__exact = blogger)

  tutorial = forms.ModelChoiceField(queryset = None, empty_label = "O'quv kursini tanlang")
  
  
  class Meta:
    model = Lesson
    fields = ['title', 'image', 'description', 'content']
    widgets = {
      'description': forms.Textarea(attrs = {'cols': 80, 'row': 20, 'class': 'materialize-textarea'}),
      'image': MyClearableFileInput
    }
03:53:59 ПП
User 48374918
Те тебе надо ограничить выбор при построении формы?
03:54:30 ПП
User 188924529
User 48374918
Те тебе надо ограничить выбор при построении формы?
Да филтироват
03:55:15 ПП
User 188924529
User 188924529
class LessonForm(forms.ModelForm):
  def __init__(self, *args, **kwargs):
    blogger = kwargs.pop('blogger')
    super(LessonForm, self).__init__(*args, **kwargs)
    self.fields['tutorial'].queryset = Tutorial.objects.filter(author__exact = blogger)

  tutorial = forms.ModelChoiceField(queryset = None, empty_label = "O'quv kursini tanlang")
  
  
  class Meta:
    model = Lesson
    fields = ['title', 'image', 'description', 'content']
    widgets = {
      'description': forms.Textarea(attrs = {'cols': 80, 'row': 20, 'class': 'materialize-textarea'}),
      'image': MyClearableFileInput
    }
Вот так сделал но когда post сделаю tutorial_id may not be null ошибка
03:56:25 ПП
User 48374918
Ну у тебя в ините вроде все правильно
03:57:06 ПП
User 188924529
User 48374918
Ну у тебя в ините вроде все правильно
Да правильно
03:57:19 ПП
User 48374918
Единственное из поля queryset = none думаю не нужен
03:57:38 ПП
User 48374918
Смотри что у тебя из формы приходит
03:58:06 ПП
User 188924529
class AddLesson(View):
  def get(self, request):
    blogger = Blogger.objects.get(user = request.user)
    lesson_form = LessonForm(blogger = blogger)
    return render(request, 'administration/add_lesson.html', {'lesson_form': lesson_form})

  def post(self, request):
    blogger = Blogger.objects.get(user = request.user)
    
    lesson = Lesson()
    lesson_form = LessonForm(request.POST, request.FILES, instance = lesson, blogger = blogger)

    if lesson_form.is_valid():
      lesson_form.save()
      return redirect('add_lesson')
    else:
      return render(request, 'administration/add_lesson.html', {'lesson_form': lesson_form})
03:59:36 ПП
User 188924529
в post форма не переполняется с tutorial_id
04:10:08 ПП
User 120578100
А селект правильно строится?
04:15:54 ПП
User 188924529
не понел?
04:17:35 ПП
User 188924529
User 120578100
А селект правильно строится?
Да select правилно
04:18:04 ПП
User 120578100
Сам селект формы.  name,  Values?
04:19:15 ПП
User 188924529
User 120578100
Сам селект формы.  name,  Values?
да правилно
04:20:14 ПП
User 120578100
Хм...  Странно тогда. На этом моя экстрасенсорика заканчивается
04:22:45 ПП
User 188924529
Я думаю, что __init__ переопределяет значения формы
04:55:45 ПП
User 120578100
User 188924529
Я думаю, что __init__ переопределяет значения формы
Я думаю что в ModelChoiceField не хватает класса модели
04:56:39 ПП
User 120578100
А queryset убрать из аргументов поля
06:40:15 ПП
User 188924529
User 120578100
А queryset убрать из аргументов поля
Убрал queryset и ошибка __init__ takes at least 2 arguments
06:41:53 ПП
User 188924529
Неужеле нет никакой пример по этой, в документации по queryset ничего нету
06:43:01 ПП
User 120578100
Ребенка спать уложу,  выйду с компа, гляну
06:45:17 ПП
User 188924529
спасибо
06:55:03 ПП
User 254082535
Могу кинуть пример, как это делаю я. Нет времени переписывать именно ваше, но там идентично.
06:58:51 ПП
User 254082535
`# form
class ManagersUpdateForm(forms.ModelForm):

    def __init__(self, user, *args, **kwargs):
        super(ManagersUpdateForm, self).__init__(*args, **kwargs)

        if user.is_superuser:
            self.fields['department'].queryset = Department.objects.all()
        else:
            self.fields['department'].queryset = Department.objects.filter(id=user.id)

        if user.is_superuser:
            self.fields['staff'].queryset = Group.objects.all().exclude(id=1)
        else:
            self.fields['staff'].queryset = Group.objects.all().exclude(id__in=[1, 2])

    department = forms.ModelChoiceField(Department.objects.all(), label='Филиал', required=False,
                                        widget=forms.Select(attrs={'class': 'form-control'}))
    staff = forms.ModelChoiceField(Group.objects.all(), label='Должность', required=False,
                                   widget=forms.Select(attrs={'class': 'form-control'}))
    # тут ещё поля, я убрал для примера
    class Meta:
        model = Managers

        fields = ('first_name', 'last_name', 'email', 'phone',
                  'additional_phone',)

# view

class ManagerEdit(TemplateView):
    template_name = 'manager_edit.html'

    def get_context_data(self, **kwargs):
        context = super(ManagerEdit, self).get_context_data(**kwargs)
        user = User.objects.get(username=kwargs['username'])
        form = ManagersUpdateForm(user)
        context['manager'] = Managers.objects.get(id=kwargs['pk'])
        context['title'] = 'Редактировать сотрудника'
        context['form'] = form
        return context

    def post(self, request, *args, **kwargs):
        user = request.user
        form = ManagersUpdateForm(user, request.POST)
        manager = Managers.objects.filter(id=kwargs['pk'])
        if form.is_valid():
            dept = form.cleaned_data['department'].id
            staff = form.cleaned_data['staff']

            manager.update(
                    first_name=form.cleaned_data['first_name'],
                    last_name=form.cleaned_data['last_name'],
                    email=form.cleaned_data['email'],
                    phone=form.cleaned_data['phone'], additional_phone=form.cleaned_data['additional_phone'],
                    dept_id=dept, is_staff=1, staff=staff, success_closed=0, is_active=1)
            return HttpResponseRedirect('/dashboard/%s/managers/' % user.username)
        return render(request, self.template_name, {'form': form, 'manager': manager})`
07:09:31 ПП
User 120578100
Я вот смотрю... Вы все принципиально не юзаете FormView?
07:10:05 ПП
User 254082535
Юзаем. Но не везде.
07:11:04 ПП
User 254082535
А так же UpdateView и DetailView. Когда это можно и быстро.