[英]Django inline formset not saving default values
我有一个子 inlineformset,如果用户更改了它,它会保存,但如果保持不变,则不会保存默认值。
SeVsEff是孩子,而患者是父母
模型.py
class Patient(TimeStampedModel):
patient_id = models.UUIDField(
primary_key=True, unique=True, default=uuid.uuid4, editable=False
)
name = models.CharField("Patient Name", max_length=255)
user = models.ForeignKey(
settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL
)
class SeVsEff(TimeStampedModel):
value = models.IntegerField(default=20)
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
表格.py
class PatientForm(ModelForm):
class Meta:
model = Patient
fields = ["name"]
SevseffFormSet = inlineformset_factory(
Patient,
SeVsEff,
fields=("value",),
widgets={'value': RangeInput()},
extra=0,
min_num=1,
validate_min=True,
labels=None,
)
视图.py
def post(self, *args, **kwargs):
form = PatientForm(data=self.request.POST)
sevseff_formset = SevseffFormSet(data=self.request.POST)
if form.is_valid():
patient_instance = form.save()
patient_instance.user = self.request.user
patient_instance.save()
if sevseff_formset.is_valid():
sevseff_name = sevseff_formset.save(commit=False)
for sevseff in sevseff_name:
sevseff.patient = patient_instance
sevseff.save()
所以我认为问题在于 sevseff_formset 没有被注册为有效,除非它被改变,但如果我添加如下内容:
if not sevseff_formset.has_changed():
sevseff_name = sevseff_formset.save(commit=False)
for sevseff in sevseff_name:
sevseff.patient = patient_instance
sevseff.save()
这不起作用,因为 sevseff_name 为空。
这样做:
sevseff_name = sevseff_formset.save(commit=False)
for sevseff in sevseff_name:
sevseff.patient = patient_instance
sevseff.save()
if not sevseff_name:
SeVsEff(value=20, patient=patient_instance).save()
来自https://forum.djangoproject.com/t/django-inline-formset-not- Saving-default-values/10647/3 的解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.