【问题标题】:django if object exists redirect to absolute urldjango 如果对象存在重定向到绝对 url
【发布时间】:2015-06-12 11:11:32
【问题描述】:

我想检查数据库中是否存在添加的用户输入。如果它确实将用户重定向到现有对象绝对 url,则传递并继续保存输入。到目前为止,我设法检查存在并获取对象,但返回 HttpResponseRedirect(input_get.get_absolute_url()) 没有重定向,尽管我可以在终端中正确打印 url (/tags/215/baseball/)。 相反,我得到:

“确保此值最多包含 50 个字符(它有 65 个)。”

有什么建议吗?谢谢

forms.py

class TagsForm(forms.ModelForm):
    def clean_tag_word(self):
        tag_word = self.cleaned_data['tag_word']
        tag_filter = TagsNew.objects.filter(tag_word=tag_word)
        if tag_filter.exists():
            tag_get = TagsNew.objects.get(tag_word=tag_word)
            tag_redirect=tag_get.get_absolute_url()
            print (tag_redirect)
            return HttpResponseRedirect(tag_redirect)
        else:
            pass
        return tag_word

models.py(get_absolute_url):

def get_absolute_url(self):
        return reverse('tags:tagsnew_detail', kwargs={'pk':self.pk, 'slug':self.slug})

models.py:

class TagsNew(models.Model):
    id = models.AutoField (primary_key=True)
    tag_word = models.CharField(max_length=50, blank=True)
    slug = models.CharField(max_length=50, blank=True)
    timestamp=models.DateTimeField(auto_now_add=True, auto_now= False)
    updated=models.DateTimeField(auto_now_add=False, auto_now= True)

    class Meta:
        managed = True
        db_table = 'tags_new'

    def save(self, *args, **kwargs):
        self.slug = slugify(self.tag_word)
        super(TagsNew, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('tags:tagsnew_detail', kwargs={'pk':self.pk, 'slug':self.slug})

    def __str__(self): 
        return self.tag_word

追踪:

/tags/221/corrections/
<ul class="errorlist"><li>tag_word<ul class="errorlist"><li>Ensure this value has at most 50 characters (it has 65).</li></ul></li></ul>
[08/Apr/2015 04:47:52] "POST /tags/add/ HTTP/1.1" 200 16662
[08/Apr/2015 04:47:52] "GET /static/js/ajax.js HTTP/1.1" 404 1634
[08/Apr/2015 04:47:52] "GET /static/tags/css/style.css HTTP/1.1" 304 0

【问题讨论】:

  • 你能展示一下TagsNew模型吗?您似乎在某些字段中提到了最大长度为 50。
  • 确定我刚刚添加了模型
  • 还请添加完整的跟踪。谢谢
  • 我添加了踪迹,Ankit Popli 你发现有什么错误吗?也许 clean_tag_word 中缺少 request 参数?

标签: python django forms redirect exists


【解决方案1】:

问题是您在clean_tag_word() 中返回一个HttpResponseRedirect 对象。该函数期望返回一个 tag_word 属性,但您会得到一些大的重定向对象(return HttpResponseRedirect(tag_redirect) 行)。然后,当 Django 尝试将其保存到 DB 时,该对象将被调用 __str__,它必须具有一些 65 个字符长的字符串表示形式。

解决方案是将重定向逻辑从表单移动到它所属的控制器。如果您使用的是通用 django 视图的子类,可能在 render_to_response()form_valid() 中。

另外,切勿使用else: pass。那是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 2018-06-04
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多