Last active
March 22, 2023 05:09
-
-
Save rg3915/88035f705454b46fd3bca726e93af6f9 to your computer and use it in GitHub Desktop.
form add select add form validation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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