2

これは以前に尋ねられたことに気づきましたが、私がやろうとしていることを実際に扱った質問を見つけることができませんでした. かなり単純だと思いますが、ここで一般の人々が考える最良の形を知りたいです.

以下があるとしましょう。

models.py

class TestClass(models.Model):
    user = models.ForeignKey(User)
    testfield = models.CharField()
    testbool = models.BooleanField(default=False)

def save(self, *args, **kwargs):
    """
    - what we're trying to do here is ensure that the User doesn't have more than
      X (lets say 5) related test fields.
    - what if we also wanted to add validation to testfield to ensure it was 
      only [a-zA-Z]?
    """
    if TestClass.objects.filter(user=self.user).count() >= 5:
        # How do we exit gracefully?
        return 
    super(TestClass, self).save(*args, **kwargs)

保存関数のコメントは、私の質問をほぼ要約しています。これをユーザーにどのように報告しますか? - testfield オブジェクトをどこで検証して、[az] のみが含まれていることを確認しますか? reをインポートして、ここでもそれを行うことはできますか? 私はすべきですか?

ここに全部入れたほうがいいの?pre_save シグナルを送信する必要がありますか? または、検証付きの ModelForm を使用する必要がありますか?

4

1 に答える 1

0

現在、これを行う明確な場所がないことは正しいです。そのため、モデル レベルの検証を追加するための Summer of Code プロジェクトが現在進行中であり、これにより、この種のことを簡単に行うことができます。

残念ながら、それは数ヶ月の準備ができていません. それまでの間、回答はデータの追加方法によって異なります。それはプログラムで行われるのでしょうか、それとも常にフォームを介して行われるのでしょうか? 後者の場合は、検証をフォームに入れる方法です (管理者ビューと独自のビューの両方で同じモデルフォームまたはそのサブクラスを使用できるため、ロジックを複製する必要がないことに注意してください)。

于 2009-06-05T08:59:29.020 に答える