Мой тестовый пример дает мне следующую ошибку.
django.db.utils.IntegrityError: вставить или обновить таблицу
«django_admin_log» нарушает ограничение внешнего ключа
"django_admin_log_user_id_c564eba6_fk_auth_user_id" ДЕТАЛИ: Ключ
(user_id) = (1) отсутствует в таблице "auth_user".
В моем классе просмотра у меня есть запись в журнале, во время теста request.user.id
всегда Нет. так что используйте anonymous_user
, который равен id = 1.
(Если я закомментировал LogEntry.objects.log_action()
, тестовый проход)
Мой взгляд на класс:
class MyView(CreateAPIView):
# For admin LogEntry
anonymous_user_id = get_anonymous_user_id()
def post(self, request, *args, **kwargs):
"""
...
"""
LogEntry.objects.log_action(
user_id=request.user.id or self.anonymous_user_id,
content_type_id=self.content_type_id,
object_id=target.id,
object_repr=str(target),
action_flag=ADDITION,
change_message='message',
)
return Response({}, status=status.HTTP_200_OK)
Мой тест:
def test_myview_append_api_works(self):
def myview_append(url, p1, p2):
resp = None
resp = self.client.post(url, data={'paraphrase': p1, 'data_id': p2})
return resp
url = reverse('api-my_data:paraphrase_append')
current_qa = Qa.objects.all()[0] # get current existing qa = the qa created in the setUp
p1 = 'test paraphrase'
p2 = target.id
resp = myview_append(url, p1, p2)
self.assertEqual(resp.status_code, status.HTTP_200_OK)
Я пытался использовать request_factory
для установки пользователя в запросе, но это не сработало
request = self.request_factory.post(url, data={'paraphrase': p1, 'qa_id': p2})
request.user = self.user
resp = MyView.as_view()(request)
Может ли кто-нибудь помочь мне с этим тестом.