python - 如果为空,则阻止 django formset 提交
问题描述
我有一个表单,我只希望用户能够在填写表单集中的字段时提交。这是一个动态表单集,用户可以在其中添加和删除行,我想要它,以便至少一行需要有一个条目。但是,即使表单集无效,似乎也可以提交。
例如,如果用户没有输入“年龄”条目,则弹出窗口将要求他们输入一些内容。“诊断”不会发生这种情况
模型.py
class Patient(TimeStampedModel):
patient_id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False)
age = models.IntegerField("Age")
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
null=True,
on_delete=models.SET_NULL)
class Diagnosis(TimeStampedModel):
DIAG_CHOICES = [
(‘heart’, (
(‘mi’, ‘heart attack’),
(‘chf’, ‘heart failure’),
)
),
(‘kidney’, (
(‘arf’, ‘acute renal failure’),
(‘crf’, ‘chronic renal failure’),
)
),
]
diag_name = models.CharField(
"diag", max_length=200,
choices=DIAG_CHOICES, blank=False)
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
表格.py
class PatientForm(ModelForm):
class Meta:
model = Patient
fields = ['age']
DiagnosisFormSet = inlineformset_factory(
Patient, Diagnosis, fields=("diag_name", ), extra=0, min_num=1, validate_min=True)
视图.py
class PatientAddView(LoginRequiredMixin,TemplateView):
model = Patient
template_name = "../templates/patient/add.html"
def get(self, *args, **kwargs):
patient_form = PatientForm
diagnosis_formset = DiagnosisFormSet(queryset=Diagnosis.objects.none())
return self.render_to_response({'diagnosis_formset': diagnosis_formset,
'patient_form': patient_form
})
def post(self, *args, **kwargs):
form = PatientForm(data=self.request.POST)
diagnosis_formset = DiagnosisFormSet(data=self.request.POST)
if form.is_valid():
patient_instance = form.save()
patient_instance.user = self.request.user
patient_instance.save()
if diagnosis_formset.is_valid():
diag_name = diagnosis_formset.save(commit=False)
for diag in diag_name:
diag.patient = patient_instance
diag.save()
return redirect(reverse(
'patient:treatment_detail',
kwargs={"patient_id": patient_instance.patient_id}))
解决方案
from django.forms.widgets import Select
DiagnosisFormSet = inlineformset_factory(
Patient, Diagnosis, fields=("diag_name",), extra=1, min_num=1, validate_min=True,
widgets={
'diag_name': Select(attrs={'required': 'required'}),
},
)
推荐阅读
- javascript - javascript (window).unload 不适用于某些 chrome 版本
- java - 如何在使用 Selenium Java 时传递条件变量?
- reactjs - 有没有办法为所有属性设置为 true 的元素添加一个类?
- python - 我在python中使用了随机库,对我来说这是第一次,你能帮帮我吗?
- matplotlib - ModuleNotFoundError:使用 plotly 时没有名为“plotly.validators.bar._xaxis”的模块
- node.js - 使用单个池将创建多少个会话?
- reactjs - 我只希望管理员路由和用户限制
- android - 没有水平滚动的日历视图
- javascript - 在表单成功提交后执行一个函数
- python - 登录 Facebook Python