Проблемы с видом CreateView: Буг Джанго?

У меня есть интересная проблема, прежде всего как таковая модель:

class Reserva(models.Model):
    cliente = models.CharField(max_length = 200)
    empleado_de_turno = models.ForeignKey(User, on_delete = models.CASCADE)

Проблема состоит в создании инстанции модели Reserva atraves вида CreateView, который создаст одна формуляр, чтобы создавать вышеупомянутую инстанцию, но в формуляре я не хочу, чтобы оно явилось полем empleado_de_turno я хочу, чтобы оно только явилось полем cliente и что по умолчанию стоимость поля empleado_de_turno будьте пользователь, который наставил сеанс в этом моменте.

Хороший, чтобы решать вышеупомянутую проблему, пробуйте изменяя данные, посланные методом POST, в методе get_form_kwargs:

class ReservaCreateView(CreateView):
    model = Reserva
    template_name = 'testapp1/example.html'
    fields = ['cliente']
    success_url = reverse_lazy('home')

    def get_form_kwargs(self):
        form_kwargs = super().get_form_kwargs()
        if form_kwargs.get('data'):
            user = User.objects.get(username = self.request.user)
            post = self.request.POST.copy()
            post['empleado_de_turno'] = str(user.pk)
            form_kwargs['data'] = post

        return form_kwargs

Случай состоит в том, что оно я не функционирует, всегда у меня выходит эта ошибка:

django.db.utils.IntegrityError: NOT NULL constraint failed: testapp1_reserva.empleado_de_turno_id

Я начал стараться спорить, где точно происходила ошибка, потому что решение метода get_form_kwargs который я показал раньше, был бы должен решать ошибку, и ошибка происходит в методе form_valid, специально в form.save(), здесь исходный код метода form_valid:

ModelFormMixin:

 def form_valid(self, form):
     """If the form is valid, save the associated model."""
     self.object = form.save()
     return super().form_valid(form)

FormMixin:

def form_valid(self, form):
    """If the form is valid, redirect to the supplied URL."""
    return HttpResponseRedirect(self.get_success_url())

(Я сделал следующее с намерением видеть, как это структура данных, когда была создана инстанция, не опуская полей, и когда было опущено поле empleado_de_turno, чтобы так мочь отвечать структуру в момент опущения вышеупомянутого поля и в момент изменения вышеупомянутых данных, и так можения решать проблему, предотвращая ошибки)

Я женю 1:

В методе form_valid, я напечатал form.data когда в признаке fields у него была следующая стоимость:

fields = ['cliente']

Я женю 2:

После я сделал они сам но в этом случае признак fields у него была следующая стоимость:

fields = ['cliente', 'empleado_de_turno']

Я напечатал следующего способа в методе form_valid данные, так как здесь он был, где специально появлялась ошибка и помещалась возможность того, чтобы данные не были посланы, как я изменил их ранее:

def form_valid(self, form):
    print(form.data)

Результат печатения этого в 2 случаях был следующим:

<QueryDict: {'csrfmiddlewaretoken': ['SBRSJa0aw4iNJOMPwtQVsFL6V6y1cFMNGne9Kr0fA7YmtYeD8xshhDq6pc1mKjQs'], 'cliente': ['code2'], 'empleado_de_turno': ['1']}>

Это означает, что уже он состоял в том, чтобы он напечатал form.data в Случае 1 или в Случае 2, данные точно равны, что значит, что проблема не данные в момент изменения их, это что-то еще (прихожу к заключению я).

Так как даже в момент печатения form.is_valid в методе form_valid, дай как результат True.

Тогда: Потому что он дает ошибку, если я отвечаю структуру данных правильно изменять это? Я не нахожу его почувствованным в вышеупомянутую ошибку, весь процесс изменения я это делаю правильно.


Обновление 1:

Многие думают, что в действительности поле empleado_de_turno жди в form или в виде объект, я он послал один id и они могут думать, что это ошибка, но это не так.

Прежде всего, уже я это попробовал, в ves помещения одного id в поле empleado_de_turno, я поместил объект, и он давал ту же ошибку.

Разум, которого поле empleado_de_turno ждет один id и не объект, - потому что так таково, как об этом управляет вид, по крайней мере, в момент получения данных методом POST, не, потому что он управляет об этом так, так, он, как это решили разработчики Django.

Это могут подтверждать в Случае 2, не опускается никакое поле, объедаются два поля с нормальностью и он печатается в методе form_valid вошедшие данные о следующем способе: form.data.

Напечатав это дай как результат:

<QueryDict: {'csrfmiddlewaretoken': ['SBRSJa0aw4iNJOMPwtQVsFL6V6y1cFMNGne9Kr0fA7YmtYeD8xshhDq6pc1mKjQs'], 'cliente': ['code2'], 'empleado_de_turno': ['1']}>

Ясно возможно наблюдать, что key empleado_de_turno он считает стоимостью один id, не объект.

Там возможно подтверждать, что поле empleado_de_turno он не ждет как таковой объект, по крайней мере, не в этом этапе вида.

12
задан 30.07.2019, 21:19
0 ответов