Skip to content

Instantly share code, notes, and snippets.

@rg3915
Last active March 22, 2023 05:09
Show Gist options
  • Save rg3915/88035f705454b46fd3bca726e93af6f9 to your computer and use it in GitHub Desktop.
Save rg3915/88035f705454b46fd3bca726e93af6f9 to your computer and use it in GitHub Desktop.
form add select add form validation
def save_data(data, form_class, model, field) -> bool:
'''
Adiciona um novo valor no FK vindo do select do form.
Usando select2 com tags:true no select.
field_name: Nome do campo no form.
field_name_fk: Nome do campo na tabela ForeignKey.
field_value: Valor do campo field_name.
'''
field_name, field_name_fk, field_value = field
model_exists = None
if field_value.isdigit():
model_exists = model.objects.filter(pk=field_value).exists()
if not model_exists:
kw = {field_name_fk: field_value}
obj, _ = model.objects.get_or_create(**kw)
data[field_name] = obj
form = form_class(data)
if form.is_valid():
form.save()
return True
def product_create(request):
template_name = 'product/product_form.html'
form = ProductForm()
if request.method == 'POST':
field_value = request.POST.get('setor')
field = ('setor', 'nome', field_value)
data = request.POST.copy()
if save_data(
data=data,
form_class=ProductForm,
model=Setor,
field=field,
):
return redirect('product:product_list')
context = {'form': form}
return render(request, template_name, context)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment