Skip to content

Instantly share code, notes, and snippets.

@richellyitalo
Last active March 7, 2019 01:19
Show Gist options
  • Save richellyitalo/d8d60429109236293cb27dbc9d16b3e2 to your computer and use it in GitHub Desktop.
Save richellyitalo/d8d60429109236293cb27dbc9d16b3e2 to your computer and use it in GitHub Desktop.

doc.: https://docs.djangoproject.com/en/2.1/topics/forms/modelforms

Formulário (forms.py)

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address
        # fields = '__all__'
        fields = ('address', 'address_complement', 'city', 'state', 'country')
        widgets = {
            'address': forms.TextInput(attrs={'class': 'form-control'}),
            'address_complement': forms.TextInput(attrs={'class': 'form-control'}),
            'city': forms.TextInput(attrs={'class': 'form-control'}),
            'state': forms.Select(attrs={'class': 'form-control'}),
            'country': forms.TextInput(attrs={'class': 'form-control'})
        }

Método criação (views.py)

def address_create(request):
    form_submitted = False
    if request.method == 'GET':
        form = AddressForm()
    else:
        form_submitted = True
        form = AddressForm(request.POST)
        if form.is_valid():
            # apenas hidrata o `address` sem salvar no banco
            address = form.save(commit=False) 
            # para podermos associar o user
            address.user = request.user
            address.save()
            return redirect('/addresses/')

    return render(request, 'my_app/address/create.html', 
      {'form': form, 'form_submitted': form_submitted}
    )

Método atualização (views.py)

def address_update(request, id):
    form_submitted = False
    address = Address.objects.get(id=id)
    if request.method == 'GET':
        form = AddressForm(instance=address)
    else:
        form_submitted = True
        form = AddressForm(request.POST, instance=address)
        if form.is_valid():
            address.save()
            return redirect('/addresses/')
    return render(request, 'my_app/address/update.html',
                  {'address': address, 'form': form, 'form_submitted': form_submitted})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment