2017-04-21 31 views
2

我最近将Django从1.3升级到了1.8.18,并且在Django admin中对预填充表单的链接进行了定制。例如,我有以下链接:Django Admin转义文本

/admin/miscellaneous/whatsnew/add/?title=...%20competition%20results%20uploaded&pub_date=21-04-2017&body=&link= 

执行时预填充数据的形式如下: enter image description here

,它应该是这样的:

enter image description here

当直接从Safari的URL栏进行测试时,按下回车键后会更改为:

https://flyball.org.au/admin/miscellaneous/whatsnew/add/?title=...%2520competition%2520results%2520uploaded&pub_date=21-04-2017&body=&link= 

models.py

class WhatsNew(models.Model): 
    title = models.CharField(max_length=100,help_text='Title, MAX 100 characters.') 
    body = models.TextField() 
    pub_date = models.DateField() 
    message_expiry = models.DateField(default=datetime.date.today() + relativedelta(years=1)) 
    link = models.URLField(blank=True, null=True) 

    class Meta: 
     ordering = ['-pub_date'] 
     verbose_name_plural = "Whats New?" 

    def __unicode__(self): 
     return self.title 

admin.py

import models 
from django.contrib import admin 

class WhatsNewAdmin(admin.ModelAdmin): 
    list_display = ('title','pub_date','message_expiry','link','body') 

admin.site.register(models.WhatsNew, WhatsNewAdmin) 

我能做些什么来解决这个问题?

+1

你能不能也显示负责填写此表,即读取来自查询参数'title'并将其进料形式的代码? – AKS

+0

@AKS我在这里没有做任何特殊的代码,它是Django的一部分,不知道在哪里可以找到它 –

+0

它确实对我有效。我尝试使用'%20',并在管理员表单中显示空格。 – AKS

回答

1

使用+而不是%20空间和它的作品。

你的链接应该是这样的:

/admin/miscellaneous/whatsnew/add/?title=...+competition+results+uploaded&pub_date=21-04-2017&body=&link= 
2

因此,我不确定如何在ModelAdmin上做到这一点,但是您可以在模型上创建自定义setter来处理这种情况。这是我怎么会去逃避URL编码的字符串:

import urllib 


class WhatsNew(models.Model): 
    # Field with custom setter 
    _title = models.CharField(max_length=100, 
          help_text='Title, MAX 100 characters.', 
          db_column='title') 

    body = models.TextField() 
    pub_date = models.DateField() 
    message_expiry = models.DateField(default=datetime.date.today() + relativedelta(years=1)) 
    link = models.URLField(blank=True, null=True) 

    # Custom getter and setter 
    @property 
    def title(self): 
     return self._title 

    @title.setter 
    def title(self, value): 
     self._title = urllib.unquote(value) 

    class Meta: 
     ordering = ['-pub_date'] 
     verbose_name_plural = "Whats New?" 

    def __unicode__(self): 
     return self._title 
+0

这很有趣,以前没有看过。我只用了'+'符号,它似乎已经解决了它。谢谢 –

+0

我刚刚看到了一些问题,特别是在Chrome中,它会阻止你在URL中插入符号并自动为你编码。我认为这可能是发生了什么,但我猜不是!很高兴一切顺利! – wholevinski