Невозможно присвоить значение "1": "Event.created_by" должен быть экземпляром "User".
Я все еще получаю ошибки, такие как:
Невозможно присвоить значение "1": "Event.created_by" должен быть экземпляром "User".
или Невозможно назначить "admin": "Event.created_by" должен быть экземпляром "User".
моя модель:
class Event(models.Model):
name = models.CharField('the name of the event', max_length=255)
created_at = models.DateTimeField(default=timezone.now, validators=[LessThanNowValidator()])
additional_data = models.CharField(max_length=300, blank=True, default='')
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
class CustomUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
api_token = models.CharField(max_length=100, blank=True, null=True, unique=True)
def __str__(self):
return f"{self.user.username}"
Мое мнение:
class EventApiView(mixins.ListModelMixin, viewsets.GenericViewSet):
queryset = Event.objects.all()
serializer_class = EventSerializer
@action(methods=['POST'], detail=False)
def post(self, request):
raw = json.dumps(request.data)
data = json.loads(raw)
name = data.get('name')
additional_data = data.get('additional_data')
created_by = data.get('created_by')
event_data = {
'name': name,
'additional_data': additional_data,
'created_by': created_by #also tried "request.user.username"
}
event = Event.objects.create(**event_data)
serializer = EventSerializer(data=event_data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
created_by
является ForeignKey
к объекту User
, поэтому вы можете присвоить created_by=request.user
, а не его .username
:
event_data = {
'name': name,
'additional_data': additional_data,
'created_by': request.user
}
или если вы хотите работать с первичным ключом объекта, вы можете использовать created_by_id
:
event_data = {
'name': name,
'additional_data': additional_data,
'created_by_id': data['created_by']
}