【问题标题】:How to create an object inside the CreateView in Django?如何在 Django 的 CreateView 中创建对象?
【发布时间】:2018-12-09 09:48:29
【问题描述】:

我想使用 CreateView 在我的视图中创建并保存一个对象。

> example in django documentation,使用表单创建新对象,而我有字段值(我知道用户和他选择的书)并想在视图中创建它,就像这样。

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))

【问题讨论】:

  • 当您尝试那里的 CBV 时遇到什么错误?
  • @leelum1 你不能使用 pk 以我使用的方式获取书。所以它说'name 'pk' is not defined'

标签: django django-views django-class-based-views django-generic-views django-2.0


【解决方案1】:

你应该在你的 CBV 中使用 form_valid 方法 查看文档 - https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-editing/#form_valid,如 form.instance.user = self.request.user 以提供您的价值观

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2019-06-06
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多