0

したがって、「開発者」と「慈善団体」という選択肢が制限されたモデルがあります。実際のフォームのラジオボタンの値をそれら以外の値に変更すると、Django はエラー メッセージを返します。しかし、テストでは、見かけの値を受け入れます。要するに、テストは失敗するべきではありませんが、失敗します。または、Django が整合性エラーか何かを発生させる必要があります。

実際には、プロファイルの外部キー フィールドをテストする際に別の問題が発生しますが、それはおそらく別の質問のために保存するのが最善です。

モデル コード スニペット:

# models.py
user_type       = models.CharField(max_length=30, choices={
                    ('Developer', 'Developer'),
                    ('Charity', 'Charity'),
                    }, blank=False, null=False)

ただし、テストで次のことを行うと、エラー メッセージは表示されません。

 # tests.py
 def test_no_user_type(self):
        my_values = self.DEFAULT_VALUES
        my_values[self.USER_TYPE] = 'something'
            # this row creates and saves the user and the profile.
        user, profile   = self.save_user(my_values)
            # I thought this bit would be irrelevant at this point because 
            # there should be an error message 
        test_correct = (profile.user_type != 'something')
        self.assertEqual(test_correct, True)

def save_user(self, values):
    user = User.objects.create()
    user.username           = values[self.USERNAME]
    user.email              = values[self.EMAIL]
    user.set_password(values[self.PASSWORD])
    user.save()
    profile                 = user.get_profile()
            ...     
            profile.user_type       = values[self.USER_TYPE]
            ...

    profile.save()
    return user, profile



# constants from the top
PASSWORD        = 1
EMAIL           = 2
USER_TYPE       = 3
...
FIELD_LIST = ['username', 'password', 'email', 'user_type']
...
DEFAULT_VALUES = ['test_username', 'test_password', 'test_email@test.com', 'Developer']
...
4

1 に答える 1

0

モデル フォーム (Django 管理者を含む) を使用すると、Django はモデル インスタンスを検証します。それ以外の場合は、インスタンスのfull_cleanメソッドを手動で呼び出して検証する必要があります。

于 2013-07-18T00:28:30.033 に答える