Django поведение CreateView класса в зависимости от того какое поле подели заполнено

Допустим есть модель models.py:

class UserData(models.Model):
    input_int = models.IntegerField(null=True, blank=True)
    input_str = models.CharField(max_length=50, null=True, blank=True)

form.py:

class UserDataForm(forms.ModelForm):
    class Meta:
        model = UserData
        fields = '__all__'

Как сделать ветвление в CreateView классе в зависимости от того, какое поле модели заполнено.

Например views.py:

class UserDataView(generic.CreateView):
    model = UserData
    form_class = UserDataForm
    
    # !далее псевдокод который не понимаю как реализовать! 
    if input_int:
        #create object with some int value and str==null
    elif input_str:
        #create object with some str value and int==null

как правильно написать код в CreateView классе в зависимости от того какое поле ввел пользователь?


Ответы (1 шт):

Автор решения: Andrey Maslov

Можно реализовать этот функционал в методе form_valid он будет вызываться если пользователь ввел данные формы корректно.

class UserDataView(generic.CreateView):
    model = UserData
    form_class = UserDataForm
    
    def form_valid(self, form):
        if form.cleaned_data.get('input_int'):
            # create object with some int value and str==null
        elif form.cleaned_data.get('input_str'):
            # create object with some str value and int==null

→ Ссылка