是否可以将ModelForm中的两个模型字段组合在一个字段中?
我的模特:
class Sample(models.Model):
request_number = models.PositiveIntegerField()
year = models.PositiveIntegerField()
part = models.CharField(max_length=6, null=True, blank=True)
class Meta:
db_table = "sample"
unique_together = (('request_number', 'year', 'part'),)
def __str__(self):
sample_id = "%s/%s" %(str(self.request_number), str(self.year)[2:])
return(sample_id)
因此,样本从模型返回为/或123/18
但是,如果我创建一个ModelForm,我不希望两个字段输入request_number然后输入year . 相反,我希望用户输入123/18的一个字段,我的表单来解析request_number和year,以及要验证的ModelForm .
我已经尝试过这个普通的django表单,但它在我的视图中没有验证 .
形成:
class SingleSampleForm(forms.Form):
sample_id = forms.CharField(
required=True,
label='Sample ID:')
class Meta:
fields = ['sample_id']
def __init__(self, *args, **kwargs):
super(SingleSampleForm, self).__init__()
self.helper = FormHelper()
self.helper.layout = Layout(
Field('sample_id',
css_class="search-form-label",
),
Submit('submit', 'Search sample', css_class='upload-btn')
)
self.helper.form_method = 'POST'
def clean(self):
sample_id = self.cleaned_data['sample_id']
if sample_id:
return sample_id
raise ValidationError('This field is required')
views.py:
class SampleView(View):
sample_form = SingleSampleForm
def get(self, request, *args, **kwargs):
sample_form = self.sample_form()
self.context = {'sample_form': sample_form,}
return render(request,
'results/single_sample_search.html',
self.context)
def post(self, request, *args, **kwargs):
sample_form = self.sample_form(request.POST)
if sample_form.is_valid():
print('Valid')
else:
print('not valid')
self.context = {'sample_form': sample_form,}
return render(request,
'results/single_sample_search.html',
self.context)
是否可以使用django ModelForm,并创建一个两者组合的字段,然后可以在“clean_request_number”和clean_year“方法中解析和验证?或者为什么我这个自定义表单出错?
谢谢
1 回答
以下代码在我的机器上运行,即ubuntu18.04 python3.6.5 django2.0 pipenv:
models.py
forms.py
views.py
结果/ sample_create.html
结果/ sample_detail.html