Как создать объект внутри CreateView в Django? - PullRequest
0 голосов
/ 30 июня 2018

Я хочу создать и сохранить объект в моем представлении, используя CreateView.

> пример в документации django , использует форму для создания нового объекта, когда у меня есть значение поля (я знаю пользователя и книгу, которую он выбрал) и хочу создать его внутри представления, что-то вроде это.

from django.views import generic

class BookReserveView(generic.CreateView):
    model = Reservation
    person = current_login_user # the user who logged in
    book = selected_book      # selected book (I have the pk)
    success_url = reverse_lazy('book:reserve_book') # when the object saved go to this url

и это моя модель бронирования.

class Reservation(models.Model):

    person = models.ForeignKey(User, on_delete=models.CASCADE)
    book = models.ForeignKey(Copy, on_delete=models.CASCADE)

    date_reserved = models.DateTimeField(auto_now_add=True)

Я попробовал этот код, и он работал для меня. но мне нравится использовать общие представления (CBV)

from book.models import Copy,Reservation

def BookReserveView(request,pk):
    book = Copy.objects.get(pk=pk)
    reserve_obj = Reservation(book=book, person=request.user)
    reserve_obj.save()
    return HttpResponse(str(reserve_obj))

1 Ответ

0 голосов
/ 30 июня 2018

Вы должны использовать метод form_valid внутри себя CBV посмотрите документацию - https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-editing/#form_valid, как form.instance.user = self.request.user для предоставления ваших значений

...