【问题标题】:django createview how to get the object that is createddjango createview 如何获取创建的对象
【发布时间】:2012-10-29 20:32:31
【问题描述】:

我有两个连接的形式。基本上,用户填写第一个表单,然后被重定向到第二个表单,这为第一个表单的数据增加了价值。 例如。我有一个表单电影(第一个表单),然后我被重定向到将演员添加到电影的表单(演员)。

在我的情况下,电影 = Chiamata 和演员 = Offerta(我保留意大利名字来满足我的需要:D)

很好。

这些是我在 urls.py 中的网址

url(r'^chiamata/$', ChiamataCreate.as_view(),name='chiamata_create'),
url(r'^chimamata/(?P<pk>\d+)/offerta$', OffertaCreate.as_view(), name='offerta_create'),

我有这个创建视图

class ChiamataCreate(CreateView):
    template_name = 'chiamata_form.html'
    form_class = ChiamataForm
    success_url=reverse_lazy('offerta_create',args=(??,))

现在的问题是如何获得由 chiamataForm 创建的对象的 PK。我需要将其添加到 offerta_create 的 url。

【问题讨论】:

    标签: django django-class-based-views create-view


    【解决方案1】:

    也许你可以使用get_success_url() 方法(see reference

    在这种情况下,它会是这样的:

    def get_success_url(self):
        return reverse('offerta_create',args=(self.object.id,))
    

    【讨论】:

    • 是的,它可以工作def get_success_url(self): return reverse('offerta_create',args=(self.object.id,))
    • @EsseTi 当我尝试像您那样使用self.object.id 时,我得到了None,即使self.object 确实存在并且它正在保存到我的数据库(MySQL)中。关于为什么会这样的任何见解?
    • 并非如此。可能是它(尚未)保存,所以没有 id。如果你尝试访问另一个字段会发生什么?
    • @EsseTi 哎呀,直到现在才看到这个(我又遇到了同样的问题:P)。使用任何其他字段都可以正常工作。 self.object 给了我一个对象就好了,所有其他数据都在那里,但idNone
    • 是数据库中的对象吗?如果这样,id 应该在那里。如果不是,则表示它没有被存储,所以没有 id(这只是一个猜测)
    【解决方案2】:

    请在Why doesn't self.object in a CreateView have an id after saving to the database? 上查看已接受的答案 - 一旦我从模型中删除了“id”字段,并按照该答案中的建议让 Django 在每个模型上默认为其自己的 id AutoField,self.object.id 就可以正常工作在我的 CreateView 中。

    【讨论】:

    • 丹尼尔的回答没有解决这个问题,这个问题的问题是糟糕的表设计,没有让 Django 处理主键的自动增量。
    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 2018-12-09
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多