Можно ли объединить два поля модели в ModelForm для ввода в одно поле char?
Моя модель:
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 и затем год.Вместо этого я хотел бы, чтобы одно поле char для пользователя вводило 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 "? Или почему я ошибаюсь в этой пользовательской форме?
Спасибо