У меня есть база данных клиентов и процедур, каждый клиент может иметь несколько процедур. Проблема заключается в том, что обработка теряет значение Customer в БД, а вместо идентификатора клиента значение просто NULL.Модель Django теряет свои отношения ForeignKey пока форма сохраняется
это происходит в следующем коде:
def get_treatment(request, treatment_id):
customer = Treatment.objects.get(id=treatment_id).customer
if request.POST:
form = TreatmentForm(request.POST, instance=Treatment.objects.get(id=treatment_id))
if form.is_valid():
form.save() #***This is where it happens***
return HttpResponseRedirect('/')
else:
form = TreatmentForm(instance=Treatment.objects.get(id=treatment_id))
return render_to_response('new_treatment.html',
{"form" : form,
"customer_name" : customer,
},
RequestContext(request))
Может кто-нибудь объяснить это странное поведение?
class TreatmentForm(forms.ModelForm):
class Meta:
model = Treatment
fields = "__all__"
BOOL_CHOICES = (
(True, 'has'),
(False, 'none')
)
customer = forms.ModelChoiceField(queryset=Customer.objects.all(), widget=forms.RadioSelect(renderer=HorizontalRadioRenderer), required=False)
# Looking inspections
skin_hue_finding = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinHue.objects.all(), initial=0)
skin_hue_area = forms.CharField(max_length=200, required=False)
skin_hue_comments = forms.CharField(max_length=200, required=False)
skin_color_finding = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinColor.objects.all(), initial=0)
skin_color_area = forms.CharField(max_length=200, required=False)
skin_color_comments = forms.CharField(max_length=200, required=False)
pores_finding = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=Pores.objects.all(), initial=0)
pores_area = forms.ModelMultipleChoiceField(queryset=GlobalArea.objects.all(), widget=forms.CheckboxSelectMultiple(renderer=HorizontalCheckboxRenderer), required=False)
pores_comments = forms.CharField(max_length=200, required=False)
comdones_finding = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES))
comdones_area = forms.ModelMultipleChoiceField(queryset=GlobalArea.objects.all(), widget=forms.CheckboxSelectMultiple(renderer=HorizontalCheckboxRenderer), required=False)
comdones_comments = forms.CharField(max_length=200, required=False)
wrinkles_finding = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
wrinkles_area = forms.ModelMultipleChoiceField(queryset=WrinklesArea.objects.all(), widget=forms.CheckboxSelectMultiple(renderer=HorizontalCheckboxRenderer), required=False)
wrinkles_mimics = forms.BooleanField(required=False)
wrinkles_age = forms.BooleanField(required=False)
wrinkles_comments = forms.CharField(max_length=200, required=False)
# Touching
muscle_tonus = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=MuscleTonus.objects.all(), initial=0)
skin_torgor = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinTorgor.objects.all(), initial=0)
skin_thinkness = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinThickness.objects.all(), initial=0)
skin_touch = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinTouch.objects.all(), initial=0)
# Skin Problems
papules = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
papules_area = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinProblemAreas.objects.all(), required=False, initial=0)
papules_comments = forms.CharField(max_length=200, required=False)
postules = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
postules_area = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinProblemAreas.objects.all(), required=False, initial=0)
postules_comments = forms.CharField(max_length=200, required=False)
scars = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
scars_area = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=SkinProblemAreas.objects.all(), required=False, initial=0)
scars_comments = forms.CharField(max_length=200, required=False)
malium = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
malium_area = forms.ModelChoiceField(widget=RadioSelect(renderer=HorizontalRadioRenderer), queryset=MaliumAreas.objects.all(), required=False)
malium_comments = forms.CharField(max_length=200, required=False)
pigmentation = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
pigmentation_area = forms.CharField(max_length=200, required=False)
pigmentation_comments = forms.CharField(max_length=200, required=False)
nebuses = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
nebuses_area = forms.CharField(max_length=200, required=False)
nebuses_comments_color = forms.CharField(max_length=200, required=False)
nebuses_comments_hair = forms.CharField(max_length=200, required=False)
macules = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
macules_area = forms.CharField(max_length=200, required=False)
macules_comments = forms.CharField(max_length=200, required=False)
hypermia = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
hypermia_area = forms.CharField(max_length=200, required=False)
hypermia_comments = forms.CharField(max_length=200, required=False)
coproz = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
coproz_area = forms.CharField(max_length=200, required=False)
coproz_comments = forms.CharField(max_length=200, required=False)
hersotism = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
hersotism_area = forms.CharField(max_length=200, required=False)
hersotism_comments = forms.CharField(max_length=200, required=False)
other_problems = forms.NullBooleanField(widget=RadioSelect(renderer=HorizontalRadioRenderer, choices=BOOL_CHOICES), required=True)
other_problems_area = forms.CharField(max_length=200, required=False)
other_problems_comments = forms.CharField(max_length=200, required=False)
skin_diagnosis = forms.ModelMultipleChoiceField(queryset=DiagnosisCategory.objects.all(), widget=forms.CheckboxSelectMultiple(renderer=HorizontalCheckboxRenderer), required=True)
diagnosis_comment = forms.CharField(widget=forms.TextInput(attrs={'size':55}), max_length=200, required=False)
treatment_purpose = forms.CharField(widget=forms.TextInput(attrs={'size':55}), max_length=200)
customer_guidance = forms.CharField(widget=forms.Textarea(), max_length=200, required=False)
customer_recommendations = forms.CharField(widget=forms.Textarea(), max_length=200, required=False)
next_treatment_date = forms.DateField(required=True, input_formats=["%d-%m-%Y"], widget=forms.DateInput(format='%d-%m-%Y'))
next_treatment_comments = forms.CharField(widget=forms.Textarea(), max_length=200, required=True)
def __init__(self, *args, **kwargs):
super(TreatmentForm, self).__init__(*args, **kwargs)
self.fields["next_treatment_date"].widget.attrs["class"] = "datepicker"
def clean(self):
cleaned_data = super(TreatmentForm, self).clean()
validation_dict = {}
data = self.cleaned_data
if data.get("comdones_finding") == True and len(data.get("comdones_area")) == 0:
validation_dict["comdones_area"] = ["This field is required",]
# Check Boolean fields
if data.get("comdones_finding") is None:
validation_dict["comdones_finding"] = ["This field is required",]
if data.get("wrinkles_finding") is None:
validation_dict["wrinkles_finding"] = ["This field is required",]
if data.get("papules") is None:
validation_dict["papules"] = ["This field is required",]
if data.get("postules") is None:
validation_dict["postules"] = ["This field is required",]
if data.get("scars") is None:
validation_dict["scars"] = ["This field is required",]
if data.get("malium") is None:
validation_dict["malium"] = ["This field is required",]
if data.get("pigmentation") is None:
validation_dict["pigmentation"] = ["This field is required",]
if data.get("nebuses") is None:
validation_dict["nebuses"] = ["This field is required",]
if data.get("macules") is None:
validation_dict["macules"] = ["This field is required",]
if data.get("hypermia") is None:
validation_dict["hypermia"] = ["This field is required",]
if data.get("coproz") is None:
validation_dict["coproz"] = ["This field is required",]
if data.get("hersotism") is None:
validation_dict["hersotism"] = ["This field is required",]
if data.get("other_problems") is None:
validation_dict["other_problems"] = ["This field is required",]
if validation_dict:
raise forms.ValidationError(validation_dict)
return data
Пожалуйста, покажите 'ЛечениеФорма' – Alasdair
Образовательная форма была добавлена –
Является ли клиент определенно выбранным при отправке формы? У вас есть 'required = False', что означает, что« клиент »должен« Нет ». У вас все еще возникает проблема, если вы удалите 'customer = forms.ModelChoiceField()' из формы и пусть Django автоматически отображает его? – Alasdair