Почему в оболочке можно создать объект с пустыми атрибутами, даже если они установлены как 'null = False, blank = False'? - PullRequest
0 голосов
/ 02 марта 2020

Я только начинаю учиться писать тесты в Django, поэтому я новичок.

Я сейчас пытаюсь протестировать представление с именем create_person, которое позволяет пользователю вводить первый и фамилия, для создания объекта персонажа.

Чтобы было понятно, это класс Person:

class Person(models.Model):
    first_name = models.CharField(max_length=100, null=False, blank=False)
    last_name = models.CharField(max_length=100, null=False, blank=False)
    slug = models.SlugField()

    def __str__(self):
        return F"%s %s" % (self.first_name, self.last_name)

Я знаю, что даже без указания blank и null значений (которые по умолчанию установлены на False), проверка на уровне шаблона не даст пользователю создать объект Person, но я бы хотел, чтобы это работало и в бэкэнде.

Имея следующий вид:

def create_person(request):
    form = PersonForm()
    template_name = 'create_person.html'
    persons = Person.objects.all()
    works = Work.objects.all()
    if request.method == 'POST':
        form = PersonForm(request.POST)
        if form.is_valid():
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            Person.objects.create(first_name=first_name, last_name=last_name)
            return redirect(home)
    context = {'form': form,
               'persons': persons,
               'works': works,
               }
    return render(request, template_name, context)

И желая только проверить переменную контекста person, я написал следующий тест:

def test_no_name_person(self):
    """
    A person with no name given cannot be created and is not displayed.
    """
    create_person('', '')
    response = self.client.get('/create_person/')
    self.assertEqual(response.status_code, 200)
    self.assertQuerysetEqual(response.context['persons'], [])

Но когда я запускаю тест, я получаю следующее вывод:

AssertionError: Lists differ: ['<Person:  >'] != []

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

Попытка сделать то же самое в оболочке python результат так или иначе.

Так что мой вопрос: как это возможный'? Кроме того, как я могу написать такую ​​проверку в tests.py?

Спасибо за любые разъяснения

...