イベントモデルオブジェクトを作成するビューのテストを作成しようとしています。イベントモデルには、モデルオブジェクトの作成者としてauth userを参照するforeignKeyフィールドが含まれています。テストでは、ログインしているユーザーにrequest.userを設定すると仮定したユーザーにログインしようとしました。テストされているビューは、通常、ajaxによって正常に起動されたときに、テスト私は以下のエラーを取得し続けます。また、 "class.setupTestData()"で作成されたユーザーを参照する代わりに、テスト関数内でユーザーを作成しようとしましたが、同じエラーが発生します。djangoテストでは、foreignKeyフィールドに "event.creator"を渡す必要があります。
エラー
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