2
respostas

Como fazer um select que retorna os dados de uma outra tabela Django

Tenho uma tabela com nome "company" que se relaciona através de uma foreingkey com a tabela "enterprise". Para criar uma nova company fora do django admin, criei uma página html, mas não consigo fazer com que o select retorne os dados da tabela enterprise.

View para registrar a company

def register_company(request):

if request.method == 'POST':

    enterprise = Enterprise.objects.all()

    name_company = request.POST['name_company']
    cnpj_company = request.POST['cnpj_company']
    area_company = request.POST['area_company']
    manager_company = request.POST['manager_company']
    email_company = request.POST['email_company']
    status = request.POST['status']
    logo_company = request.FILES['logo_company']
    enterprise = request.POST['enterprise']

    company = Company.objects.create(name_company=name_company, cnpj_company=cnpj_company, area_company=area_company,
                                     manager_company=manager_company, email_company=email_company, logo_company=logo_company,
                                     status=status, enterprise=enterprise)

    company.save()

    return redirect(enterprise, 'list_company')

else:
    return render(request, 'register_company.html')

Parte da página HTML que deve retornar o select com os dados da tabela "enterprise")

       <div class="col-md-4">
           <label><b>Unidade</b></label>
               <div class="form-group">
                <select class="form-control form-control-md" name="enterprise" required>
                     {% for enterprise in enterprise %}
                        <option value="{{enterprise.id}}"> {{enterprise.enterprise_name}} </option>
                    {% endfor %}
                </select>
               </div>
       </div>
   </div>
2 respostas

olá Caio César pelo que vi vc esta fazendo um redirect com objeto a menos que ele esteja com um metodo de get_absolute_url, se não seu redirect deve ir direto para pagina, como return redirect('list_company') e quando essa pagina fizer o get deve se passar o enterprise.


def list_company(request):
        enterprise = Enterprise.objects.all()
        return render(request, 'list_company.html', context={'enterprise':enterprise})

ou recomendo olhar um pouco cbv

se torna mais facil usando apenas

classListCompanyView(ListView):

    model = Company
    template_name = 'list_company'

    def get_context_data(self, **kwargs):
        context = super(classListCompanyView, self).get_context_data(**kwargs)
        context['enterprise'] = Enterprise.objects.all()
        return context

Fábio, bom dia!

Agradeço pela ajuda, mas acabei não entendendo... no caso em que expus, a necessidade é retornar dentro de um select do hmtl quais as "enterprises" tenho no banco para que o usuário selecione uma para que uma nova "company" seja registrada no banco de dados... Para criar uma nova "company", estou usando a função "register_company", não é nela que preciso pegar o dado para gravar no banco?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software