Hi guys,

I got a working model.clean() method that actually does a great job showing 
the errors in the assigned html-form. *The view actually marks single 
invalid fields red, which I find really important*.

*BUT:*
Now I want to *write a test* for that model and would love to *test for 
error_codes*.

*Does anyone know how to raise an error_code-exception within the model and 
keep the view rendering the invalid-fields correctly?*

Ok... I think it's easier to understand with some code:


class MyNotebookModel(models.Model):
    note = models.TextField()
    name = models.CharField()

    def clean(self):
        errors = defaultdict(list)
        # errors = {}  # does NOT work with view

        # Validate self.note
        if 'P.S. I love django!' not in self.note:
            message = 'BadAss: Give some credits to Django!'
            errors['note'].append(message)
            # errors.append(ValidationError(_(message), code=1))  # does 
NOT work in view

        # Validate self.name
        if 'Steven' not in self.note:
            message = 'BadAss: I only allow names with Steven'
            errors['note'].append(message)
            # errors.append(ValidationError(_(message), code=2))  # does 
NOT work in view

        if len(errors):
            raise ValidationError(errors)


class TestMyNotebookCreateView(CreateView):
    # in my View I want to show errors by field and mark the error-fields 
RED
    # it works with the above approach, but NOT with error_codes



class TestMyNotebookModelTest(unittest):
    def test_clean(self):
        # I'd love to be able to do a test like this one
        # and valide the error code!

        # Lets get an error-message
        with self.assertRaises(ValidationError) as test:
            model = MyNotebookModel()
            model.note = 'Now this is a valid one. P.S. I love django!'
            model.name = 'Britney is gonna fail - Hit me Baby One More 
Time!'
            model.clean()
            model.save()
        # validate that the error messages has the right code
        the_exception = test.exception
        self.assertEqual(the_exception.error_code, 2)


Any ideas how to make this work?
What is best practise?

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/a5d1a379-5896-4743-ada9-8494f6d57284%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to