根据其ID获取对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据其ID获取对象相关的知识,希望对你有一定的参考价值。

设置

我正在尝试编写一个DeleteView,它将基于其ID删除一个对象。该对象是日记,我想引用用户当前所在的日记。因此,例如,如果User1在日记“工作”中,则要基于日记ID而不是其他任何内容删除该特定日记。

我的理解是Django为每个模型创建一个ID字段(自动字段)。

错误

这是我当前的观点:

class DeleteJournal(LoginRequiredMixin, DeleteView):
    model = Journal
    tempalte_name = 'delete_journal.html'
    success_url = reverse_lazy('home')

    def get_object(self, queryset=None):
        id = self.kwargs['id']
        return self.get_queryset().filter(id=id).get()

我收到的错误是这样:

enter image description here

对此有什么解决方案,为什么它不起作用?

编辑1

urlpatterns = [
    path('', CreateToJournal.as_view(), name='to-journals'),
    path('<slug:slug>', ToJournalEntriesList.as_view(), name='to-journal-entries'),
    path('<slug:slug>/delete', DeleteJournal.as_view(), name='delete-journal'),
]

[请注意,我不想基于段删除,因为日记可以具有相同的名称,因此对于不同的用户而言,段可以相同。唯一的唯一值是id,这就是为什么我需要get id作为“当前”日记帐的原因。

提前感谢一吨,非常感谢任何关注此内容的人。

答案

为了删除子弹中没有pk或id的对象,您必须在get_object上使用DeleteView方法

def get_object(self):
        return Journal.objects.get(pk=self.request.GET.get('pk'))

这里有一个类似的问题:Django UpdateView without pk in url

另一答案

不幸的是,路易斯·席尔瓦(Luis Silva)的回答没有帮助。我发现get_object()函数需要一个pk_url_kwarg设置,经过一番挖掘后,我发现了这个StackOverflow帖子:Arguments of DetailView methods and usage of pk_url_kwarg

这是DeleteView的代码:

views.py

class DeleteJournal(LoginRequiredMixin, DeleteView):
    model = to_journal
    tempalte_name = 'to_journals/delete_journal.html'
    success_url = reverse_lazy('home')
    pk_url_kwarg = 'id'

以上是关于根据其ID获取对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UITableView 中获取对象 id 并根据对象 id 删除对象?

根据viewpager位置更改适配器

NodeJS 和 MongoDB - 根据 id 数组获取对象

jquery 怎么获取对象的id

片段 TextView 无法从 parcelable 对象更新

没有使用 navController.currentDestination?.id 获取当前片段 ID