Невозможно присвоить объект "<django.contrib.auth.models.AnonymousUser:
Я пытался написать тест, используя следующий код:
class ViewTestCase(TestCase):
def setUp(self):
self.user = User.objects.create_user(first_name='tester',
username='test1',
password='123',
email='testuser@something.com')
def test_room_creation(self):
c = Client()
payload = {"titlePlanning": "Teste1","styleCards": "Fibonnaci","deck": ["1","2","3"]}
c.login(username='test1',password='123')
request = c.post('/room', payload, content_type='application/json')
response = BeginRoom.as_view()(request)
self.assertEqual(response.status_code, 200)
print(request)
Представление, которое я тестирую, нуждается в следующих данных:
class BeginRoom(APIView):
permissions_classes = (IsAuthenticated,)
def post(self, request, format=None):
data= self.request.data
user = request.user
name = data['titlePlanning'].strip()
styleCards = data['styleCards']
cards = data['deck']
Это модель, к которой представление обращается для выполнения POST:
class PokerRoom(models.Model):
status = models.CharField(max_length=1,choices=STATUS, verbose_name=_('status')
name = models.CharField(max_length=200,verbose_name=_('name of the room'))
styleCards = MultiSelectField(choices=CHOICES, default=FIBONACCI)
user = models.ForeignKey(User, on_delete=DO_NOTHING)
deck = models.ForeignKey(Pack, on_delete=models.CASCADE)
active_story = models.OneToOneField('Story', on_delete=models.SET_NULL,verbose_name=_('active_storys'),
related_name='active_in',
null=True)
Моя проблема заключается в том, что всякий раз, когда я запускаю свой тест, я получаю следующую ошибку:
ValueError: Cannot assign "<django.contrib.auth.models.AnonymousUser object at
0x7fbfb77ca3d0>": "PokerRoom.user" must be a "User" instance.
Я думал, что мне нужно только войти под своим пользователем и после этого он будет инстанцирован, но это не работает. Кто-нибудь может мне помочь?
Похоже, что вы используете Django REST Framework с этим APIView? У меня нет опыта работы с ним, но у них есть свой собственный APIClient, который вы, возможно, захотите использовать вместо Client от Django: https://www.django-rest-framework.org/api-guide/testing/#authenticating