Поставить дефолтное значение в поле Django

Рейтинг: 0Ответов: 1Опубликовано: 25.08.2023

Мне нужно поставить дефолтное значение в поле.

models.py

class OrderModel(models.Model):
    client_name = models.CharField(max_length=120, verbose_name='Имя клиента')
    order_number = models.IntegerField(verbose_name='Номер заказа', blank=True)
    phone_number = models.CharField(max_length=15, verbose_name='Номер телефона')
    print_type = models.CharField(choices=PRINT_TYPE_CHOICE, default=PRINT_TYPE_CHOICE[0][0],
                                  verbose_name='Тип печати')
    numbers_of_page = models.IntegerField(verbose_name='Кол-во листов')
    create_date = models.DateTimeField(auto_now_add=True, blank=True)
    file_for_print = models.FileField(upload_to=file_directory_path, verbose_name='Файл')
    status = models.CharField(choices=STATUS_CHOICE, default=STATUS_CHOICE[0][0], blank=True, verbose_name='Статус')

views.py

class CreateOrderView(View):
    def get(self, r: WSGIRequest):

        form = CreateOrderForm()

        context = {
            'form': form
        }


        return render(r, 'main_service/create_order.html', context)

    def post(self, r: WSGIRequest):
        form = CreateOrderForm(r.POST)

        if form.is_valid():

            OrderModel.objects.create(**form.cleaned_data, order_number=Utl.get_unique_order_number())
            return redirect('/')
        else:
            print(form.errors,
                  form.cleaned_data)
            return HttpResponse('Ошибка, проверьте правильность ввода данных')

forms.py

class CreateOrderForm(ModelForm):
    class Meta:
        model = OrderModel

        fields = ['client_name', 'phone_number', 'numbers_of_page', 'file_for_print', 'print_type']

        print_type = ChoiceField(choices=PRINT_TYPE_CHOICE)

        widgets = {
            'client_name': TextInput(attrs={'class': 'form-control', 'placeholder': 'Имя'}),
            'phone_number': TextInput(attrs={'class': 'form-control', 'placeholder': 'Номер телефона'}),
            'numbers_of_page': NumberInput(attrs={'class': 'form-control', 'placeholder': 'Кол-во листов'}),
            'file_for_print': FileInput(attrs={'class': 'form-control'}),
            'print_type': Select(attrs={'class': 'form-select', 'id': 'inputGroupSelect01'}),
        }

Поле order_number должно автоматически само генерироваться, а потом сохраняться вместе с данными формы. Но когда я отправляю POST запрос, то получаю такую ошибку <ul class="errorlist"><li>file_for_print<ul class="errorlist"><li>Обязательное поле.</li></ul></li></ul>. Я не понимаю каким образом можно решить мою проблему. Если уже были подобные проблемы, то буду рад увидеть ссылку на статью с решением (английский приемлем)

Ответы

▲ 0Принят

Проблема была не с order_number, а с полем для загрузки файлов file_for_print. Вместе с POST запросом приходит еще и FILES, его то и нужно тоде передать в форму, где приходит POST запрос - r.FILES

Готовый views.py ниже

views.py

class CreateOrderView(View):
    def get(self, r: WSGIRequest):

        form = CreateOrderForm()

        context = {
            'form': form
        }


        return render(r, 'main_service/create_order.html', context)

    def post(self, r: WSGIRequest):
        form = CreateOrderForm(r.POST, r.FILES)

        if form.is_valid():

            OrderModel.objects.create(**form.cleaned_data, order_number=Utl.get_unique_order_number())
            return redirect('/')
        else:
            print(form.errors,
                  form.cleaned_data)
            return HttpResponse('Ошибка, проверьте правильность ввода данных')