Django не сохраняет форму
Я немного запутался, в отношении ссылок на другие модели в формах.
Я создал следующую форму, которая ссылается на auditsModel в качестве модели:
class auditForm(ModelForm):
class Meta:
model = auditsModel
fields = '__all__'
Все работает хорошо, и я могу удалять, добавлять и сохранять данные в форме, но затем я захотел создать выпадающие окна с опциями, и эти опции (проверка данных) были сохранены в другой модели под названием dv_model. Поэтому я создал следующее поле с помощью ModelChoiceField, которое принимает в качестве запроса модель dv_model.
Defect_Area_Associate = forms.ModelChoiceField(queryset=dv_model.objects.values_list('Defect_Area_dv',flat=True).distinct(),widget=forms.Select)
Все работает, но когда я нажимаю сохранить и обновляю страницу, она возвращается в прежнее состояние.
Еще кое-что, что я заметил, это то, что другие поля, которые обычно сохраняются, если я попытаюсь изменить их, я получу следующую ошибку:
IntegrityError at /A3QGSDAKRQXG6H/
NOT NULL constraint failed: main_auditsmodel.Defect_Area_Associate
Почему-то форма не сохраняется при обращении к другой модели?
Это мой forms.py:
class auditForm(ModelForm):
class Meta:
model = auditsModel
fields = '__all__'
#RADIO BUTTONS
CHOICES = [('Defect', 'yes'),
('No Defect', 'no')]
CHOICES_Action_correctly_captured = [('yes', 'yes'), ('no', 'no')]
Audit_outcome = forms.ChoiceField(choices=CHOICES, widget=RadioSelect())
Action_correctly_captured = forms.ChoiceField(choices=CHOICES_Action_correctly_captured, widget=RadioSelect())
Defect_Area_Associate = forms.ModelChoiceField(queryset=dv_model.objects.values_list('Defect_Area_dv',flat=True).distinct(),widget=forms.Select)
def __init__(self, *args, **kwargs):
super(auditForm, self).__init__(*args, **kwargs)
# Makes the field un-editable
#FIELDS-----------
# IPV COMMENT BOX
self.fields['QA_Comments_on_Associate_Action'].widget = forms.Textarea(
attrs={'class': 'form-control', 'style': 'height: 100px'}) # Sets the size of the widget
# SIV COMMENT BOX
self.fields['QA_Comments_on_investigator_Action'].widget = forms.Textarea(
attrs={'class': 'form-control', 'style': 'height: 100px'}) # Sets the size of the widget
#ENABLE/DISABLE FIELDS
self.fields['country'].disabled = True
self.fields['associate_resolve_date'].disabled = True
self.fields['qs_login'].disabled = True
self.fields['associate_resolve_date'].disabled = True
self.fields['seller_id'].disabled = True
self.fields['Task_ID'].disabled = True
self.fields['associate_queue'].disabled = True
self.fields['associate'].disabled = True
self.fields['metric_wk_no'].disabled = True
self.fields['associate_action'].disabled = True
for field in self.fields:
self.fields[field].required = False
if field != "qs_login" and field != "Status" and field != "associate_resolve_date" and field != "QA_Comments_on_Associate_Action" and field != "Audit_outcome":
self.fields[field].widget.attrs['class'] = "form-control"
Views.py
@login_required(login_url='Login')
def auditFormPage(request, pk):
model = auditsModel.objects.filter(qs_login=request.user)
form = auditForm()
try:
data = auditsModel.objects.get(Task_ID=pk)
form = auditForm(instance=data)
if request.method == 'POST':
form = auditForm(request.POST, instance=data)
if form.is_valid():
print('TRYING TO SAVE')
form.save()
except auditsModel.DoesNotExist:
pass
context = {
"items": model,
"form": form
}
return render(request, "main/auditform.html", context)