gpt4 book ai didi

python - get_object_or_404 django 失败

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:54 25 4
gpt4 key购买 nike

这是代码:

>>> from shortener.models import KirrURL
>>> from django.shortcuts import get_object_or_404
>>> obj = get_object_or_404(KirrURL,shortcode='pric3e')

Traceback (most recent call last):File"/Users/phil/Desktop/django110/lib/python3.5/site
packages/django/shortcuts.py", line 85, in get_object_or_404
return queryset.get(*args, **kwargs)
File "/Users/phil/Desktop/django110/lib/python3.5/site-packages/django/db/models/query.py", line 385, in get
self.model._meta.object_name
shortener.models.DoesNotExist: KirrURL matching query does not exist.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/phil/Desktop/django110/lib/python3.5/site-packages/django/shortcuts.py", line 93, in get_object_or_404
raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
django.http.response.Http404: No KirrURL matches the given query.

>>> obj = KirrURL.objects.get(shortcode='pric3e')
>>> obj
<KirrURL: http://google.com>
>>> obj.id
1
>>> obj.url
'http://google.com'

我现在正在练习 django 模型。问题是当我使用 get_object_or_404 试图获取与第二个关键字参数匹配的数据时,它以某种方式失败了。当我使用 get() 方法时。它成功了。我想我认为我应该在这里得到相同的结果。

#Model Class
class KirrURLManager(models.Manager):
def all(self,*args,**kwargs):
qs = super(KirrURLManager,self).all(*args,**kwargs)
qs_main = qs.filter(active=False)
return qs_main

def refresh_shortcodes(self,items=None):
qs = KirrURL.objects.filter(id__gte=1)
if items is not None and isinstance(items,int):
qs = qs.order_by('-id')[:items]
for q in qs:
q.shortcode = create_shortcode(q)
q.save()
print(q.id)
class KirrURL(models.Model):
url = models.CharField(max_length=220,)
shortcode = models.CharField(max_length=SHORTCODE_MAX,unique=True,blank=True)
updated = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
active = models.BooleanField(default=True)
objects = KirrURLManager()
some_random = KirrURLManager()
def save(self, *args, **kwargs):
if self.shortcode is None or self.shortcode == "":
self.shortcode = create_shortcode(self)
super(KirrURL, self).save(*args, **kwargs)
def __str__(self):
return str(self.url)
def __unicode__(self):
return str(self.url)

最佳答案

我想问题出在覆盖 all() 方法上。当您使用 get_object_or_404() 时,它是 calling _get_queryset() 函数返回 manager.all()。但由于重写 all() 仅返回非事件对象,并且 get_object_or_404(KirrURL,shortcode='pric3e') 的结果为空。

关于python - get_object_or_404 django 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40819104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com