Не удалось отправить данные в базу данных с сообщением о недопустимости формы
#Я не могу отправить данные в свою базу данных, пожалуйста, помогите мне проверить.#
Вот модель
Model:
class f_groupe_user(models.Model):
IDF_GROUPE_USER=models.AutoField(primary_key=True)
LibELE_GROUPE= models.CharField(max_length=120)
Soc_sigle = models.CharField(max_length=120)
created_at=models.DateTimeField(auto_now_add=True)
updated_at= models.DateTimeField(auto_now=True)
UTIL_CREATION= models.CharField(max_length=120)
UTIL_MODIF= models.CharField(max_length=120)
def __str__(self):
return self.LibELE_GROUPE
Вот форма
class f_groupe_userForm(forms.ModelForm):
class Meta:
def __init__(self, *args, **kwargs):
super(f_groupe_userForm, self).__init__(*args, **kwargs)
model = f_groupe_user
fields = ['LibELE_GROUPE', 'UTIL_CREATION', 'UTIL_MODIF','Soc_sigle']
labels = {'LibELE_GROUPE': 'Nom*', 'created_at': 'Date de création', 'updated_at': 'Date de modification', 'UTIL_CREATION': 'UTIL CREATION', 'UTIL_MODIF': 'UTIL MODIF', 'Soc_sigle':',Societe'}
widgets={
'name' : forms.TextInput(attrs={'class':'form-control'}),
}
help_texts = {
"LibELE_GROUPE": _("Donner le nom du groupe utilisateur"),
}
error_messages = {
"name": {
"max_length": _("Ce nom du groupe est trop long."),
},
}
Вот виды
def Insert_group(request):
print(f" La Request method est : {request.method}")
sEtat = "crea"
if request.method == 'POST':
print('Je rentre dans group Insert_group avec POST'))
form = f_groupe_userForm()
form.LibELE_GROUPE = request.POST.get("LibELE_GROUPE")
form.updated_at = timezone.now()
form.created_at = timezone.now()
form.UTIL_CREATION = settings.WCURUSER
form.UTIL_MODIF = settings.WCURUSER
form.Soc_sigle = settings.WSOCGEN
data = {
"UTIL_CREATION": settings.WCURUSER,
"UTIL_MODIF": settings.WCURUSER,
"Soc_sigle" : settings.WSOCGEN,
}
print(f" La valeur de data est : {data}")
form = f_groupe_userForm(request.POST, initial=data)
print(request.method)
if form.has_changed():
print("The following fields changed: %s" % ", ".join(form.changed_data))
if form.is_valid():
LibELE_GROUPE = form.cleaned_data['LibELE_GROUPE']
created_at = form.cleaned_data[
'created_at']
updated_at = form.cleaned_data['updated_at']
UTIL_CREATION = form.cleaned_data['UTIL_CREATION']
UTIL_MODIF = form.cleaned_data['UTIL_MODIF']
Soc_sigle = form.cleaned_data['Soc_sigle']
print(f"La valeur des donnée du formulaire sont: {form.cleaned_data}")
if LibELE_GROUPE is not None:
if 'Ajouter' in request.POST:
print('Oui on peut ajouter')
f_groupe_user.save()
print('ajout effectué!!!')
return HttpResponseRedirect("CreateGroup/success")
else:
return HttpResponseRedirect("CreateGroup")
else:
return HttpResponse("Vous devriez vous assurer que tous les champs sont renseignés et validés!")
else:
print('form pas valide')
return render(request, 'appMenuAdministrator/L_liste_GroupeUtilisateur/FicheCreaGroupe.html', {'form': form})
else:
form = f_groupe_userForm()
return render(request, 'appMenuAdministrator/L_liste_GroupeUtilisateur/FicheCreaGroupe.html', {'form': form, 'sEtat': sEtat})
html-файл :
<div class="card card-body" >
<h5>Informationsx</h5>
<hr>
<p>Nom:</p>
<fieldset>
<input name="LibELE_GROUPE" type="text" id="LibELE_GROUPE" size="35"
placeholder="Nom du groupe" tabindex="1" >*
</fieldset>
<fieldset>
<input name="created_at" type="date" id="created_at" value="{{created_at}}" size="35" placeholder=""
tabindex="2" style="display:None;">
</fieldset>
<fieldset>
<input name="updated_at" type="date" id="updated_at" value="{{updated_at}}" size="35" placeholder=""
tabindex="3" style="display:None;">
</fieldset>
<fieldset>
<input name="UTIL_CREATION" type="text" id="UTIL_CREATION" value="{{UTIL_CREATION}}" size="35"
placeholder="" tabindex="4" style="display:None;>
</fieldset>
<fieldset>
<input name="UTIL_MODIF" type="text" id="UTIL_MODIF" value="{{UTIL_MODIF}}" size="35" placeholder=""
tabindex="5" style="display:None;">
</fieldset>
<fieldset>
<input name="Soc_sigle" type="text" id="Soc_sigle" value="{{Soc_sigle}}" size="35" placeholder=""
tabindex="6" style="display:None;">
</fieldset>
</div>
</div>
Вот сообщения об ошибках, которые выводятся на терминал:
La Request method est : POST
Je rentre dans group Insert_group avec POST
La valeur de data est : {'created_at': datetime.datetime(2025, 5, 15, 11, 42, 53, 871867), 'updated_at': datetime.datetime(2025, 5, 15, 11, 42, 53, 871867), 'UTIL_CREATION': 'admin', 'UTIL_MODIF': 'admin', 'Soc_sigle': 'ABI'}
POST
The following fields changed: LibELE_GROUPE
The following fields are not valid : UTIL_CREATION, UTIL_MODIF, Soc_sigle, created_at, updated_at
[15/May/2025 11:42:53] "POST /AccessAdmin/Insert_group HTTP/1.1" 200 11181
[15/May/2025 11:42:53] "GET /static/css/all.min.css HTTP/1.1" 404 1985
Пожалуйста, помогите исправить. Мне не нужны поля дат, а также отображаются поля создания и изменения пользователем
Я полагаю, что ваша форма не сохраняется, потому что вы неправильно создаете экземпляр модели.
Попробуйте что-нибудь вроде этого:
def Insert_group(request):
if request.method == 'POST':
form = f_groupe_userForm(request.POST)
if form.is_valid():
group = form.save(commit=False)
group.UTIL_CREATION = settings.WCURUSER
group.UTIL_MODIF = settings.WCURUSER
group.Soc_sigle = settings.WSOCGEN
group.save()
return redirect('success_url')
else:
form = f_groupe_userForm()
return render(request, 'template.html', {'form': form})
Используйте form.save(commit=False), чтобы получить несохраненный экземпляр, затем установите скрытые поля перед окончательным сохранением.
@Mahrez, похоже, та же ошибка, поэтому ничего не изменилось. Я тестирую код, и проблема в том, что форма недействительна. Ваш ответ - когда форма будет действительна, прежде чем применять код сохранения. пожалуйста, не могли бы вы проверить еще раз или кто-нибудь может мне помочь, пожалуйста.
Похоже, что ваша форма неправильная, def __init__ должно быть за пределами блока meta class.
Попробуйте это:
class f_groupe_userForm(forms.ModelForm):
class Meta:
model = f_groupe_user
fields = ['LibELE_GROUPE', 'UTIL_CREATION', 'UTIL_MODIF','Soc_sigle', 'created_at', 'updated_at']
labels = {'LibELE_GROUPE': 'Nom*', 'created_at': 'Date de création', 'updated_at': 'Date de modification', 'UTIL_CREATION': 'UTIL CREATION', 'UTIL_MODIF': 'UTIL MODIF', 'Soc_sigle':'Societe'}
def __init__(self, *args, **kwargs):
super(f_groupe_userForm, self).__init__(*args, **kwargs)
self.initial['UTIL_CREATION'] = settings.WCURUSER
self.initial['UTIL_MODIF'] = settings.WCURUSER
self.initial['Soc_sigle'] = settings.WSOCGEN
self.initial['created_at'] = timezone.now()
self.initial['updated_at'] = timezone.now()
The issue is that you're including fields in your form and HTML (`created_at`, `updated_at`, UTIL_CREATION`, `UTIL_MODIF`, `Soc_sigle`)
that should not be user-editable. These fields are meant to be set automatically in the backend.
1. *Update your `f_groupe_userForm` to only include fields that should be edited by the user:**
class f_groupe_userForm(forms.ModelForm):
class Meta:
model = f_groupe_user
fields = ['LibELE_GROUPE']
Обновите свое представление, чтобы корректно обрабатывать поля, не относящиеся к форме
def Insert_group(request):
if request.method == 'POST':
form = f_groupe_userForm(request.POST)
if form.is_valid():
group = form.save(commit=False)
group.UTIL_CREATION = settings.WCURUSER
group.UTIL_MODIF = settings.WCURUSER
group.Soc_sigle = settings.WSOCGEN
group.save()
return HttpResponseRedirect("CreateGroup/success")
else:
form = f_groupe_userForm()
return render(request, 'appMenuAdministrator/L_liste_GroupeUtilisateur/FicheCreaGroupe.html', {'form': form})