Невозможно присвоить значение "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']
}
Вернуться на верх