2015-09-13 4 views
0

======= Update =======Джанго: Тестирование «чистый» метод пользовательского ModelForm с помощью Model-Мама

@JF выдвинул блестящую перспективу для использования от model mommy в ModelForms.

С помощью следующего кода мне удалось автоматически генерировать случайные данные для всех полей модели, за исключением тех, которые я хотел бы манипулировать.

tests.py:

from django.test import TestCase 
from houses.forms import ManForm 
from houses.models import Man 

class ModelsTest(TestCase): 

    def test_Man(self): 
     man = mommy.make('Man', age=20) 
     data = {each_field.name: getattr(man, each_field.name) for each_field in man._meta.fields} 
     data.update({'age_verification': 20}) 
     form = ManForm(data) 
     self.assertTrue (form.is_valid()) 

models.py

from django.db import models 

class Man(models.Model): 
    name = models.CharField(max_length = 12) 
    age = models.PositiveSmallIntegerField() 

forms.py:

from my_app.models import Man 
from django import forms 
from django.core.exceptions import ValidationError 

class ManForm(forms.ModelForm): 
    age_verification = forms.IntegerField() 

    def clean(self): 
     if not self.cleaned_data['age'] == self.cleaned_data['age_verification']: 
      raise ValidationError("Is this a LIE?") 

    class Meta: 
     model = Man 
     fields = ['name', 'age', 'age_verification']  

На данный момент, я проверить это следующим образом:

tests.py:

from django.test import TestCase 
from houses.forms import ManForm 

class ModelsTest(TestCase): 

    def test_Man(self): 
     data = { 
      'name' = 'John', 
      'age' = 20, 
      'ege_verification' = 20, 
     } 
     form = ManForm(data) 

Есть инструмент, который предоставляет случайные данные для форм? Или ... могу ли я использовать available tools для моделей для этой цели? Поиск документов, поддерживающих Python 3, я не понял, как это можно достичь.

Единственный, который четко предоставляет такую ​​услугу, - Django-Whatever, который не совместим с python3.

+0

Является 'self.cleaned_data' равно на 'None' в' clean() '? Является ли «ValidationError» поднятым? –

+0

@JF Я только что обновил свой вопрос, чтобы отразить главную проблему, которая является генератором случайных данных. Я прошу прощения за то. Модели работают, как ожидалось, проблема без проверки, была моей ошибкой. – raratiru

ответ

1

Вы могли бы сделать что-то вроде этого:

from model_mommy import mommy 
class ModelsTest(TestCase): 

    def test_Man(self): 
     man = mommy.make('Man', _fill_optional=True) 
     data = { 
      'name': man.name, 
      'age': man.age, 
      'age_verification': man.age_verification, 
     } 
     form = ManForm(data) 
+0

Спасибо! Я ищу более масштабируемое решение, в котором несколько полей могут быть определены случайным образом, за исключением полей '' 'age'' и' '' age_verification''', где я должен их определять. – raratiru

+0

Какие типы полей вы интересуете в случайном определении? –

+0

У меня есть модель, которая имеет CharFields, BooleanFields, IntegerFields и некоторые CharFields имеют атрибут выбора. [Model Mommy] (https://github.com/vandersonmota/model_mommy), например, легко ли задание для модели, почему не для ModelForm? – raratiru

1

Если вы не хотите, чтобы ввести имя каждого атрибута, вы можете сделать это:

from model_mommy import mommy 
from django.forms import model_to_dict 

class ModelsTest(TestCase): 

    def test_Man(self): 
     man = mommy.make('Man') 
     data = model_to_dict(man) 
     form = ManForm(data) 

 Смежные вопросы

  • Нет связанных вопросов^_^