2017-04-21 5 views
2

最近Djangoを1.3から1.8.18にアップグレードし、Django管理者のフォームにあらかじめ入力したリンクに関する問題が発生しました。 enter image description hereDjango Admin escaping text

それは次のようになります

enter image description here

のように見える形で予め充填されたデータを実行すると

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

:たとえば、私は次のリンクを持っています

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

は、あなたはまた、すなわち、クエリのparamsから '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でそれを行う方法がわかりませんが、この状況を処理するためにモデルにカスタムセッターを作成することができます。ここで私は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

私はちょうど、特にあなたがURLにシンボルを入れて、あなたのためにそれを自動的にエンコードするのを妨げるクロムの問題を見てきました。私はそれが起こっているかもしれないと思ったが、私はそうは思わない!すべてがうまくいってうれしい! – wholevinski