이벤트 모델 객체를 만드는 뷰에 대한 테스트를 작성하려고합니다. 이벤트 모델에는 auth user를 모델 객체의 작성자로 참조하는 foreignKey 필드가 있습니다. 테스트에서 나는 로그인 한 사용자에게 request.user를 설정할 것이라고 가정 한 사용자 로깅을 시도했다. 테스트중인 뷰는 정상적으로 Ajax를 통해 트리거 될 때 작동하지만 실행시 이벤트를 만들 때 request.user를 참조한다. 나는 아래 오류를 계속 시험해 본다. 또한 "class.setupTestData()", 같은 오류에서 만든 사용자를 참조하는 대신 테스트 함수 내에서 사용자 만들기 시도했다.django는 foreignKey 필드에 request.user를 전달하면 "Event.creator"가 "User"인스턴스 여야합니다.
오류
ValueError: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x108ae9cc0>>": "Event.creator" must be a "User" instance.
모델
class Event(models.Model):
name = models.CharField(max_length=200)
event_type = models.CharField(max_length=200, null=True)
creator = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
attendees = models.ManyToManyField(User, related_name='attendees')
start_date = models.DateField(null=True)
start_time = models.TimeField(null=True)
end_date = models.DateField(null=True)
end_time = models.TimeField(null=True)
location = models.CharField(max_length=200, null=True)
date_created = models.DateTimeField(auto_now_add=True)
description = models.TextField()
def __str__(self):
return self.name
보기
def createEvent(request):
# dec vars
event_title = str(request.POST['event-title']).title()
event_type = str(request.POST['event-type'])
event_location = str(request.POST['event-location'])
event_description = str(request.POST['event-description'])
event_start_date = str(request.POST['event-start-date'])
event_start_time = str(request.POST['event-start-time'])
event_end_date = str(request.POST['event-end-date'])
event_end_time = str(request.POST['event-end-time'])
creator = request.user
# create event
Event.objects.create(
name=event_title,
event_type=event_type,
creator=creator,
location=event_location,
description=event_description,
start_date=event_start_date,
start_time=event_start_time,
end_date=event_end_date,
end_time=event_end_time
)
# #create response
response = {
'status': 'success',
}
# send reponse JSON
return JsonResponse(response)
시험
def test_create_event(self):
today = timezone.now()
user = User.objects.get(pk=1)
# login user
self.c.login(username=user.username, password=user.password)
# Check event create
response = self.c.post('/event/create/', {
'event-title': 'test create event',
'event-type': 'combat',
'event-location': 'ltt 9455',
'event-description': lorem.paragraph,
'event-start-date': today.date(),
'event-end-date': today.date(),
'event-end-time': today.time(),
'event-start-time': today.time()
})
self.assertTrue()
Django의 RequestFactory를 사용하여 해결책을 찾은 것 같습니다. 작동하는 경우 다시 댓글을 달아 드리겠습니다. – doughboy