2

そのため、現在、モデルフォームがビューに与える Querydict を編集して、1 つのフィールドの送信をすべて小文字にし、スペースを入れないようにしています。しかし、その辞書を構築してモデルフォームに戻して検証/保存するときに、同じものが複数回入力されていてもエラーは発生しません。request.POST からの送信だけでなく、正しい形式のすべての送信に対して unique=True が機能するはずです。この問題に関するヘルプ/洞察は素晴らしいでしょう。

編集:コード

モデルフォームを処理するビュー

dict = {}
sitename = request.POST['sitename']
#insert an if statement telling them only letters are allowed
urltitle = ''.join(sitename.split()).lower()
dict['sitename'] = urltitle
make =  MakesiteForm(dict)
if make.is_valid():
      make.save()

問題のモデル

class Makesite(models.Model):
    sitename = models.CharField(max_length=100, unique = True) 
    siteinfo = models.ManyToManyField(Siteinfo)
    ref_id = models.ManyToManyField(RefID)
    def __unicode__(self):
        return u'%s' %(self.sitename)
4

1 に答える 1

2

1.組み込みdict関数を再割り当てしない

2.フィールド処理ロジックは clean メソッドで実行する必要があります。

class MakesiteForm(forms.ModelForm):

    # your code... Then

    def clean_sitename(self):
        sitename = self.cleaned_data['sitename']
        return ''.join(sitename.split()).lower()

3.フォームが有効でない場合に発生するエラーを表示しますか?

于 2012-04-22T07:27:14.053 に答える