Django TimeStampedModel не автоматически добавляет метки времени в drf APITestCase
У меня есть модель, которая наследует TimeStampedModel для автоматического добавления created и modified полей. У меня есть API, который принимает данные из почты и создает объекты. Все работает нормально, когда я тестирую API с почтальоном. Но когда я тестирую API с помощью тестовых примеров DRF, я получаю ошибку
django.db.utils.IntegrityError: null value in column "created" violates not-null constraint
DETAIL: Failing row contains (101, null, null, 3600, 3, 6).
Я получаю эту ошибку только при вызове API из тестовых примеров. В остальном, все работает нормально в postman и react frontend.
Это модель.
class Activity(TimeStampedModel):
time_spent = models.IntegerField() # in seconds
activity_type = models.ForeignKey(
ActivityType, on_delete=models.CASCADE, related_name='activities')
user = models.ForeignKey('user.User', on_delete=models.CASCADE)
Это API.
@action(detail=True, methods=['post'], serializer_class=ActivitySerializer, url_name='add_activity')
def add_activity(self, request, pk):
# add activity for a activity type
activity_type = self.get_object()
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user, activity_type=activity_type)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
А это тестовый пример.
def test_add_activity_succeed(self):
self.client.credentials(HTTP_AUTHORIZATION=f'Token {self.token}')
data = {"time_spent": 3600}
activity_type = ActivityType.objects.create(name="test1", user=self.user)
response = self.client.post(reverse('activity_types-add_activity',
kwargs={'pk': activity_type.id}), data=data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
У меня есть еще несколько моделей, которые также наследуют TimeStampedModel. И тестовые примеры работают нормально при создании этих объектов.
Я пробовал разные подходы, но все равно получаю эту ошибку. Даже когда я напрямую пытался создать объект с помощью
Activity.objects.create(time_spent=1000, user=self.user, activity_type=activity_type)
Все еще получаю ту же ошибку
django.db.utils.IntegrityError: null value in column "created" violates not-null constraint
DETAIL: Failing row contains (101, null, null, 1000, 2, 4).
Есть предположения, что может быть причиной этой ошибки?