Доброе утро! Я пытаюсь написать тесты для своего приложения, но, к сожалению, что-то все время ломается. Несмотря на то, что я создаю экземпляр модели Post, я все еще получаю ту же ошибку.
ошибка
ERROR: setUpClass (blog.tests.test_models.PostModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\madas\OneDrive\Pulpit\Code\git-projects\django_tutek\djangoenv\lib\site-packages\django\db\models\base.py", line 456, in __init__
rel_obj = kwargs.pop(field.name)
KeyError: 'author'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\madas\OneDrive\Pulpit\Code\git-projects\django_tutek\djangoenv\lib\site-packages\django\db\models\base.py", line 461, in __init__
val = kwargs.pop(field.attname)
KeyError: 'author_id'
модель
def get_default_user():
return User.objects.get(is_superuser=True)
class Post(models.Model):
field = models.TextField(choices=TOPIC, default='N/A')
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200, unique=True, null=False)
author = models.ForeignKey(User, on_delete= models.CASCADE, default=get_default_user)
content = RichTextUploadingField()
img = ResizedImageField(size=[1600, 1200], upload_to='post_pics', default='default.jpg')
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=0)
class Meta:
ordering = ['-created_on']
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post_detail', kwargs={'slug': self.slug})
тесты
from django.test import TestCase
from blog.models import Post
class PostModelTest(TestCase):
@classmethod
def setUpTestData(cls):
Post.objects.create(field='Python', title='Pierwszy post', slug='pierwszy-post', status=1)
def setUp(self):
self.post = Post.objects.get(title='Pierwszy post')
def test_author(self):
self.assertEqual(self.post.author == 'adam')
ОБНОВЛЕНИЕ Так что я понял, что случилось. Я забыл, что unittest создает собственную базу данных, поэтому я не могу получить пользователя по умолчанию. Мне нужно было создать собственный экземпляр User для проверки правильности работы функции
from django.test import TestCase
from django.contrib.auth.models import User
from blog.models import Post, get_default_user
class PostModelTest(TestCase):
@classmethod
def setUpTestData(cls):
user = User(first_name='adam', is_staff=True, is_active=True, is_superuser=True)
user.save()
Post.objects.create(field='Python', title='Pierwszy post', slug='pierwszy-post', status=1, author=user)
def setUp(self):
self.post = Post.objects.get(title='Pierwszy post')
def test_author(self):
self.assertEqual(self.post.author,'adam')