Задать вопрос
@leo9797

Почему не добавляется файл в админку Django через форму из html?

Хочу создать запись в модель, но при создании добавляются текста о имени и описании файла но не сам файл. Почему? Кто сталкивался?
#views
class AddServ(FormView):
    ....
    def post(self, request, *args, **kwargs):
        form = AddServiceForm(request.POST, request.FILES)
        model = Service.objects.all()
        to_pk = model.count() + 1
        name_service = form['name_service'].data
        about_service = form['about_service'].data
        file_service = form['file_service'].data
        user = request.user
        if user.is_authenticated:
            user.loads_services.create(
                pk=to_pk,
                name_service=name_service,
                about_service=about_service,
                file_service=file_service
            )
            user.save()
        return render(request, 'elitemservice/main.html')


#model

class Service(models.Model):
    name_service = models.CharField(max_length=255, verbose_name='Назание сервиса')
    about_service = models.TextField(verbose_name='Описание микросервиса')
    file_service = models.FileField(upload_to='upload_microservice', verbose_name='Файл микросервиса')


#forms

class AddServiceForm(forms.ModelForm):
    name_service = forms.CharField(max_length=255, label="Имя сервиса")
    about_service = forms.CharField(widget=forms.Textarea, label='Описание сервиса')
    file_service = forms.FileField(label='Файл сервиса')

    class Meta:
        model = Service
        fields = '__all__'


{% load bootstrap4 %}
{% if user.is_authenticated %}
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {% for field in form %}
            {% bootstrap_field field layout='horizontal' %}
        {% endfor %}
        <label>
            <input type="button" value="Добавить сервис" id="addService">
        </label>
    </form>
{% else %}
    <p>Что бы добавить сервис требуется авторизация!</p>
{% endif %}
  • Вопрос задан
  • 294 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@Realmixer
Full stack Python (Django) web-developer
class ServiceCreateView(CreateView):
    model = Service
    template_name = 'elitemservice/main.html'

    def form_valid(self, form):
        resp = super(ServiceCreateView, self).form_valid(form)
        # после вызова суперметода в self.object находится созданный по форме объект
        user = self.request.user
        if user.is_authenticated:
            user.loads_services.create(
                pk=self.object.pk,
                name_service=self.object.name_service,
                about_service=self.object.about_service,
                file_service=self.object.file_service,
            )
            user.save()
        return resp
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы