예제 #1
0
    def __init__(self, *args, **kwargs):

        row1 = to_row([
            ('codigo', 2),
            ('titulo', 4),
            ('perfil', 3),
            ('parlamentar', 3),
        ])

        row2 = to_row([
            ('visibilidade', 2),
            ('template_classe', 3),
            ('tipo_doc_padrao', 4),
            ('template_doc_padrao', 3),
        ])
        row3 = to_row([
            ('descricao', 12),
        ])

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            Fieldset(_('Identificação Básica'),
                     row1, row2, row3))

        super(ClasseForm, self).__init__(*args, **kwargs)
예제 #2
0
    def __init__(self, *args, **kwargs):

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            to_row([('titulo', 7), ('visibilidade', 3), ('listar', 2)]),
            to_row([
                ('tipo', 4),
                ('template_doc', 4),
                ('capa', 4),
            ]),
            to_row([('descricao', 8), ('parlamentares', 4)]),
            to_row([
                ('materias', 12),
            ]),
        )

        super(DocumentoForm, self).__init__(*args, **kwargs)

        self.fields['parlamentares'].choices = [
            ('0', '--------------')
        ] + list(self.fields['parlamentares'].choices)

        self.fields['materias'].choices = [('0', '--------------')] + [
            (m.id, str(m) + ' - ' + m.ementa)
            for m in self.fields['materias'].queryset[:200]
        ]

        self.fields[
            'capa'].initial = self.instance == self.instance.classe.capa
예제 #3
0
    def __init__(self, data=None, queryset=None, prefix=None, **kwargs):

        workspace = kwargs.pop('workspace')

        super(ImpressoEnderecamentoContatoFilterSet,
              self).__init__(data=data,
                             queryset=queryset,
                             prefix=prefix,
                             **kwargs)

        col1 = to_row([
            ('search', 6),
            ('sexo', 3),
            ('tem_filhos', 3),
            ('data_nascimento', 6),
            ('idade', 6),
            ('tipo_autoridade', 6),
            ('grupo', 6),
        ])

        col2 = to_row([
            ('impresso', 12),
            ('fontsize', 4),
            ('nome_maiusculo', 4),
            ('imprimir_pronome', 4),
            ('imprimir_cargo', 5),
            ('local_cargo', 7),
        ])

        row = to_row([
            (Fieldset(
                _('Informações para Seleção de Contatos'), col1,
                to_row([(SubmitFilterPrint(
                    'filter',
                    value=_('Filtrar'),
                    css_class='btn-outline-primary pull-right',
                    type='submit'), 12)])), 6),
            (Fieldset(
                _('Informações para Impressão'), col2,
                to_row([(SubmitFilterPrint('print',
                                           value=_('Imprimir'),
                                           css_class='btn-primary pull-right',
                                           type='submit'), 12)])), 6)
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(row, )

        self.form.fields['search'].label = _('Nome/Nome Social/Apelido')
        self.form.fields['data_nascimento'].label = '%s (%s)' % (
            _('Aniversário'), _('Inicial - Final'))

        self.form.fields['tem_filhos'].choices.choices[0] = (None, _('Ambos'))

        self.form.fields['grupo'].choices = [
            ('0', _('Apenas Contatos sem Grupo')),
        ] + [(g.pk, str(g))
             for g in GrupoDeContatos.objects.filter(workspace=workspace)]
예제 #4
0
    def __init__(self,
                 data=None,
                 queryset=None,
                 prefix=None,
                 strict=None,
                 **kwargs):

        workspace = kwargs.pop('workspace')

        super(ContatoAgrupadoPorGrupoFilterSet,
              self).__init__(data=data,
                             queryset=queryset,
                             prefix=prefix,
                             strict=strict,
                             **kwargs)

        c1_row1 = to_row([
            ('municipio', 7),
            ('grupo', 7),
        ])

        col1 = Fieldset(
            _('Informações para Seleção de Contados'), c1_row1,
            to_row([
                (SubmitFilterPrint('filter',
                                   value=_('Filtrar'),
                                   css_class='btn-outline-primary pull-right',
                                   type='submit'), 12)
            ]))

        col2 = Fieldset(
            _('Inf p/ Impressão'),
            SubmitFilterPrint('print',
                              value=_('Imprimir'),
                              css_class='btn-primary pull-right',
                              type='submit'))

        rows = to_row([
            (col1, 9),
            (col2, 3),
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(rows, )

        self.form.fields['grupo'].queryset = GrupoDeContatos.objects.filter(
            workspace=workspace)
        self.form.fields['municipio'].queryset = Municipio.objects.all()
예제 #5
0
파일: forms.py 프로젝트: cmjatai/cmj
    def __init__(self, data=None,
                 queryset=None, prefix=None, strict=None, **kwargs):

        workspace = kwargs.pop('workspace')

        super(ContatoAgrupadoPorGrupoFilterSet, self).__init__(
            data=data,
            queryset=queryset, prefix=prefix, strict=strict, **kwargs)

        c1_row1 = to_row([
            ('municipio', 7),
            ('grupo', 7),
        ])

        col1 = Fieldset(
            _('Informações para Seleção de Contados'),
            c1_row1,
            to_row([
                (SubmitFilterPrint(
                    'filter',
                    value=_('Filtrar'),
                    css_class='btn-outline-primary pull-right',
                    type='submit'), 12)
            ]))

        col2 = Fieldset(
            _('Inf p/ Impressão'),

            SubmitFilterPrint(
                'print',
                value=_('Imprimir'),
                css_class='btn-primary pull-right',
                type='submit')
        )

        rows = to_row([
            (col1, 9),
            (col2, 3),
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(
            rows,
        )

        self.form.fields['grupo'].queryset = GrupoDeContatos.objects.filter(
            workspace=workspace)
        self.form.fields['municipio'].queryset = Municipio.objects.all()
예제 #6
0
    def __init__(self, *args, **kwargs):
        row1 = to_row([('email', 12)])
        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            Fieldset(_('Insira o e-mail cadastrado com a sua conta'), row1),
            actions=form_actions(label=_('Enviar')))

        super(RecuperarSenhaForm, self).__init__(*args, **kwargs)
예제 #7
0
    def __init__(self, user, *args, **kwargs):
        self.user = user
        super(NovaSenhaForm, self).__init__(user, *args, **kwargs)

        row1 = to_row([('new_password1', 6), ('new_password2', 6)])

        self.helper = FormHelper()
        self.helper.layout = Layout(row1, form_actions(label='Enviar'))
예제 #8
0
파일: forms.py 프로젝트: cmjatai/cmj
    def __init__(self, *args, **kwargs):

        rows = to_row(
            [
                (Div(
                    to_row([('titulo', 12),
                            ('descricao', 12),
                            (Div(
                                css_class="g-recaptcha",
                                data_sitekey=settings.GOOGLE_RECAPTCHA_SITE_KEY
                            ), 12)])
                ), 7),
                (Div(
                    to_row([('areatrabalho_parlamentar', 12)])
                ), 5),


            ]
        )

        if 'logged_user' in kwargs['initial'] and \
                kwargs['initial']['logged_user']:
            rows.insert(
                0, Alert(
                    _('<strong>Atenção, você foi desconectado!!!</strong><br>'
                      'Ao escolher fazer uma denúncia anônima, '
                      'o Portal da Câmara Municipal de Jataí desconectou seu '
                      'usuário para que sua manifestação não tenha nenhuma '
                      'relação com você. '
                      'Assim podemos garantir que sua denûncia é anônima '
                      'e não mantemos registro sobre você.<br>'
                      'Para voltar a utilizar das funções que você possuia '
                      'ao estar logado, é só se conectar novamente.'),
                    css_class="alert-info"))

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            *rows,
            actions=form_actions(label=_('Enviar'))
        )
예제 #9
0
    def __init__(self, *args, **kwargs):

        rows = to_row(
            [
                (Div(
                    to_row([('titulo', 12),
                            ('descricao', 12),
                            (Div(
                                css_class="g-recaptcha",
                                data_sitekey=settings.GOOGLE_RECAPTCHA_SITE_KEY
                            ), 12)])
                ), 7),
                (Div(
                    to_row([('areatrabalho_parlamentar', 12)])
                ), 5),


            ]
        )

        if 'logged_user' in kwargs['initial'] and \
                kwargs['initial']['logged_user']:
            rows.insert(
                0, Alert(
                    _('<strong>Atenção, você foi desconectado!!!</strong><br>'
                      'Ao escolher fazer uma denúncia anônima, '
                      'o Portal da Câmara Municipal de Jataí desconectou seu '
                      'usuário para que sua manifestação não tenha nenhuma '
                      'relação com você. '
                      'Assim podemos garantir que sua denûncia é anônima '
                      'e não mantemos registro sobre você.<br>'
                      'Para voltar a utilizar das funções que você possuia '
                      'ao estar logado, é só se conectar novamente.'),
                    css_class="alert-info"))

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            *rows,
            actions=form_actions(label=_('Enviar'))
        )
예제 #10
0
파일: forms_auth.py 프로젝트: cmjatai/cmj
    def __init__(self, *args, **kwargs):
        row1 = to_row(
            [('email', 12)])
        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            Fieldset(_('Insira o e-mail cadastrado com a sua conta'),
                     row1),
            actions=form_actions(label=_('Enviar'))
        )

        super(RecuperarSenhaForm, self).__init__(*args, **kwargs)
예제 #11
0
    def __init__(self, *args, **kwargs):

        rows = to_row([('descricao', 12), ('anexo', 12)])

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            *rows, actions=form_actions(label=_('Enviar')))

        self.instance.owner = kwargs['initial']['owner']
        self.instance.solicitacao = kwargs['initial']['solicitacao']
예제 #12
0
파일: forms.py 프로젝트: cmjatai/cmj
    def __init__(self, *args, **kwargs):

        row = Div(
            to_column((
                to_row([('titulo', 10), ('tipo', 2),
                        ('descricao', 12), ]),
                8)),
            to_column((
                to_row([('areatrabalho_parlamentar', 12)]),
                4)),
            css_class="row")

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            row,
            actions=form_actions(label=_('Enviar'))
        )

        self.instance.owner = kwargs['initial']['owner']
예제 #13
0
파일: forms_auth.py 프로젝트: cmjatai/cmj
    def __init__(self, user, *args, **kwargs):
        self.user = user
        super(NovaSenhaForm, self).__init__(user, *args, **kwargs)

        row1 = to_row(
            [('new_password1', 6),
             ('new_password2', 6)])

        self.helper = FormHelper()
        self.helper.layout = Layout(
            row1,
            form_actions(label='Enviar'))
예제 #14
0
    def __init__(self, *args, **kwargs):

        super(CmjUserChangeForm, self).__init__(*args, **kwargs)

        row_pwd = [
            to_row([('old_password', 12)]),
            to_row([('new_password1', 6), ('new_password2', 6)])
        ]

        row_pwd = []
        if self.instance.pwd_created:
            row_pwd.append(to_row([('old_password', 12)]))

        row_pwd += [to_row([('new_password1', 6), ('new_password2', 6)])]

        rows = to_row([
            (Fieldset(
                _('Cadastro Básico'),
                to_row([('first_name', 5), ('last_name', 4),
                        ('be_notified_by_email', 3), ('avatar', 7),
                        ('cropping', 5)])), 8),
            (Fieldset(
                _('Definição de senha'), *row_pwd,
                Alert(_('Após a definição e/ou alteração de senha, '
                        'sua tela será redirecionada para a tela de Login '
                        'para que você faça uma nova autenticação.'),
                      css_class="alert-info",
                      dismiss=False)), 4)
        ])

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(*rows)

        if not self.instance.pwd_created:
            self.fields['old_password'].widget = forms.HiddenInput()
예제 #15
0
파일: forms.py 프로젝트: cmjatai/cmj
    def __init__(self, *args, **kwargs):

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            to_row([
                ('titulo', 7), ('visibilidade', 3), ('listar', 2)
            ]),
            to_row([
                ('tipo', 4), ('template_doc', 4), ('capa', 4),
            ]),
            to_row([
                ('descricao', 8),
                ('parlamentares', 4)
            ]),
        )

        super(DocumentoForm, self).__init__(*args, **kwargs)

        self.fields['parlamentares'].choices = [
            ('0', '--------------')] + list(
            self.fields['parlamentares'].choices)

        self.fields['capa'].initial = self.instance == self.instance.classe.capa
예제 #16
0
파일: forms.py 프로젝트: cmjatai/cmj
    def __init__(self, *args, **kwargs):

        rows = to_row([('descricao', 12)])

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            *rows,
            actions=form_actions(label=_('Enviar'))
        )

        self.instance.owner = kwargs['initial']['owner']
        self.instance.solicitacao = kwargs['initial']['solicitacao']
예제 #17
0
    def __init__(self, *args, **kwargs):

        rows = to_row(
            [
                (Div(
                    to_row([('titulo', 10), ('tipo', 2),
                            ('descricao', 12), ])
                ), 7),
                (Div(
                    to_row([('areatrabalho_parlamentar', 12)])
                ), 5),

            ]
        )

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            *rows,
            actions=form_actions(label=_('Enviar'))
        )

        self.instance.owner = kwargs['initial']['owner']
예제 #18
0
    def __init__(self, *args, **kwargs):

        rows = [
            Div(
                to_column((to_row([
                    ('titulo', 8),
                    (Div(css_class="g-recaptcha",
                         data_sitekey=settings.GOOGLE_RECAPTCHA_SITE_KEY), 4),
                    ('descricao', 12),
                    (Alert(_("""<strong>Aviso</strong><br>
                            As manifestações registradas de maneira anônima são 
                            consideradas "Comunicações" e 
                            <strong class="text-red">não é possível o seu acompanhamento.</strong>
                            Caso deseje acompanhar o andamento 
                            da sua manifestação e receber uma resposta do órgão 
                            ou entidade, por favor identifique-se.
                            """),
                           css_class="alert-warning",
                           dismiss=False), 12)
                ]), 12)),

                # to_column((
                #    to_row([('areatrabalho_parlamentar', 12)]),
                #    4)),
                css_class="row")
        ]

        if 'logged_user' in kwargs['initial'] and \
                kwargs['initial']['logged_user']:
            rows.insert(
                0,
                Alert(_(
                    '<strong>Atenção, você foi desconectado!!!</strong><br>'
                    'Ao escolher fazer uma denúncia anônima, '
                    'o Portal da Câmara Municipal de Jataí desconectou seu '
                    'usuário para que sua manifestação não tenha nenhuma '
                    'relação com você. '
                    'Assim podemos garantir que sua denûncia é anônima '
                    'e não mantemos registro sobre você.<br>'
                    'Para voltar a utilizar das funções que você possuia '
                    'ao estar logado, é só se conectar novamente.'),
                      css_class="alert-info"))

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            *rows, actions=form_actions(label=_('Enviar')))
예제 #19
0
파일: forms_auth.py 프로젝트: cmjatai/cmj
    def __init__(self, *args, **kwargs):

        super(CmjUserChangeForm, self).__init__(*args, **kwargs)

        row_pwd = [to_row([('old_password', 12)]),
                   to_row(
            [('new_password1', 6),
             ('new_password2', 6)
             ])
        ]

        row_pwd = []
        if self.instance.pwd_created:
            row_pwd.append(to_row([('old_password', 12)]))

        row_pwd += [
            to_row(
                [('new_password1', 6),
                 ('new_password2', 6)
                 ])
        ]

        rows = to_row(
            [
                (Fieldset(
                    _('Cadastro Básico'),
                    to_row([
                        ('first_name', 5),
                        ('last_name', 4),
                        ('be_notified_by_email', 3),

                        ('avatar', 7),
                        ('cropping', 5)
                    ])
                ), 8),
                (Fieldset(
                 _('Definição de senha'),
                 *row_pwd,
                 Alert(_('Após a definição e/ou alteração de senha, '
                         'sua tela será redirecionada para a tela de Login '
                         'para que você faça uma nova autenticação.'),
                       css_class="alert-info",
                       dismiss=False)

                 ), 4)
            ]

        )

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(rows)
        self.helper.include_media = False

        if not self.instance.pwd_created:
            self.fields['old_password'].widget = forms.HiddenInput()
예제 #20
0
    def __init__(self, *args, **kwargs):

        row = Div(
            to_column((to_row([
                ('titulo', 10),
                ('tipo', 2),
                ('descricao', 12),
            ]), 12)),
            # to_column((
            #    to_row([('areatrabalho_parlamentar', 12)]),
            #    4)),
            css_class="row")

        super().__init__(*args, **kwargs)

        self.helper = FormHelper()
        self.helper.layout = SaplFormLayout(
            row, actions=form_actions(label=_('Enviar')))

        self.instance.owner = kwargs['initial']['owner']
예제 #21
0
    def __init__(self, data=None, queryset=None, prefix=None, **kwargs):

        workspace = kwargs.pop('workspace')

        super(ContatoAgrupadoPorProcessoFilterSet,
              self).__init__(data=data,
                             queryset=queryset,
                             prefix=prefix,
                             **kwargs)

        c1_row1 = to_row([
            ('search', 7),
            ('data', 5),
            ('importancia', 4),
            ('status', 4),
            ('classificacoes', 4),
            ('topicos', 6),
            ('assuntos', 6),
        ])

        col1 = Fieldset(
            _('Informações para Seleção de Processos'), c1_row1,
            to_row([
                (SubmitFilterPrint('filter',
                                   value=_('Filtrar'),
                                   css_class='btn-outline-primary pull-right',
                                   type='submit'), 12)
            ]))

        col2 = Fieldset(
            _('Inf p/ Impressão'), 'agrupamento',
            SubmitFilterPrint('print',
                              value=_('Imprimir'),
                              css_class='btn-primary pull-right',
                              type='submit'))

        rows = to_row([
            (col1, 9),
            (col2, 3),
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(rows, )

        self.form.fields['search'].label = _('Filtrar Títulos de Processos')

        self.form.fields['topicos'].widget = forms.SelectMultiple(
            attrs={'size': '7'})
        self.form.fields['topicos'].queryset = TopicoProcesso.objects.all()

        self.form.fields['assuntos'].widget = forms.SelectMultiple(
            attrs={'size': '7'})
        self.form.fields['assuntos'].queryset = AssuntoProcesso.objects.filter(
            workspace=workspace)

        self.form.fields['importancia'].widget = forms.CheckboxSelectMultiple()
        #self.form.fields['importancia'].inline_class = True

        self.form.fields[
            'classificacoes'].widget = forms.CheckboxSelectMultiple()

        self.form.fields['status'].widget = forms.CheckboxSelectMultiple()
        """#self.form.fields['status'].inline_class = True
        self.form.fields['status'].choices = list(
            self.form.fields['status'].choices)
        del self.form.fields['status'].choices[0]"""

        self.form.fields['agrupamento'].label = _('Agrupar Contatos')
        self.form.fields['agrupamento'].widget = forms.RadioSelect()
예제 #22
0
파일: forms.py 프로젝트: cmjatai/cmj
    def __init__(self, data=None,
                 queryset=None, prefix=None, **kwargs):

        workspace = kwargs.pop('workspace')

        super(ContatoAgrupadoPorProcessoFilterSet, self).__init__(
            data=data,
            queryset=queryset, prefix=prefix,  **kwargs)

        c1_row1 = to_row([
            ('search', 7),
            ('data', 5),
            ('importancia', 4),
            ('status', 4),
            ('classificacoes', 4),
            ('topicos', 6),
            ('assuntos', 6),
        ])

        col1 = Fieldset(
            _('Informações para Seleção de Processos'),
            c1_row1,
            to_row([
                (SubmitFilterPrint(
                    'filter',
                    value=_('Filtrar'),
                    css_class='btn-outline-primary pull-right',
                    type='submit'), 12)
            ]))

        col2 = Fieldset(
            _('Inf p/ Impressão'),
            'agrupamento',

            SubmitFilterPrint(
                'print',
                value=_('Imprimir'),
                css_class='btn-primary pull-right',
                type='submit')
        )

        rows = to_row([
            (col1, 9),
            (col2, 3),
        ])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(
            rows,
        )

        self.form.fields['search'].label = _('Filtrar Títulos de Processos')

        self.form.fields['topicos'].widget = forms.SelectMultiple(
            attrs={'size': '7'})
        self.form.fields['topicos'].queryset = TopicoProcesso.objects.all()

        self.form.fields['assuntos'].widget = forms.SelectMultiple(
            attrs={'size': '7'})
        self.form.fields['assuntos'].queryset = AssuntoProcesso.objects.filter(
            workspace=workspace)

        self.form.fields['importancia'].widget = forms.CheckboxSelectMultiple()
        #self.form.fields['importancia'].inline_class = True

        self.form.fields[
            'classificacoes'].widget = forms.CheckboxSelectMultiple()

        self.form.fields['status'].widget = forms.CheckboxSelectMultiple()
        """#self.form.fields['status'].inline_class = True
        self.form.fields['status'].choices = list(
            self.form.fields['status'].choices)
        del self.form.fields['status'].choices[0]"""

        self.form.fields['agrupamento'].label = _(
            'Agrupar Contatos')
        self.form.fields['agrupamento'].widget = forms.RadioSelect()
예제 #23
0
파일: forms.py 프로젝트: cmjatai/cmj
    def __init__(self, data=None,
                 queryset=None, prefix=None, **kwargs):

        workspace = kwargs.pop('workspace')

        super(ImpressoEnderecamentoContatoFilterSet, self).__init__(
            data=data,
            queryset=queryset, prefix=prefix, **kwargs)

        col1 = to_row([
            ('search', 6),
            ('sexo', 3),
            ('tem_filhos', 3),
            ('data_nascimento', 6),
            ('idade', 6),
            ('tipo_autoridade', 6),
            ('grupo', 6),
        ])

        col2 = to_row([
            ('impresso', 12),
            ('fontsize', 4),
            ('nome_maiusculo', 4),
            ('imprimir_pronome', 4),
            ('imprimir_cargo', 5),
            ('local_cargo', 7),

        ])

        row = to_row(
            [(Fieldset(
                _('Informações para Seleção de Contatos'),
                col1,
                to_row([(SubmitFilterPrint(
                    'filter',
                    value=_('Filtrar'), css_class='btn-outline-primary pull-right',
                    type='submit'), 12)])), 6),
             (Fieldset(
                 _('Informações para Impressão'),
                 col2,
                 to_row([(SubmitFilterPrint(
                     'print',
                     value=_('Imprimir'), css_class='btn-primary pull-right',
                     type='submit'), 12)])), 6)])

        self.form.helper = FormHelper()
        self.form.helper.form_method = 'GET'
        self.form.helper.layout = Layout(
            row,
        )

        self.form.fields['search'].label = _(
            'Nome/Nome Social/Apelido')
        self.form.fields['data_nascimento'].label = '%s (%s)' % (
            _('Aniversário'), _('Inicial - Final'))

        self.form.fields['tem_filhos'].choices.choices[0] = (None, _('Ambos'))

        self.form.fields['grupo'].choices = [
            ('0', _('Apenas Contatos sem Grupo')),
        ] + [(g.pk, str(g)) for g in GrupoDeContatos.objects.filter(
            workspace=workspace)]