根据其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()
我收到的错误是这样:
对此有什么解决方案,为什么它不起作用?
编辑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 删除对象?
NodeJS 和 MongoDB - 根据 id 数组获取对象