170 похожих чатов

Доброе утро. Пытаюсь реализовать API, а точнее создание продукта, но

ошибка:
{
"email": [
"Некорректный тип. Ожидалось значение первичного ключа, получен str."
]
}

Модель User кастомная:
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(db_index=True, max_length=255, unique=True)

email = models.EmailField(db_index=True, unique=True)
...


Также модель Product:
class Product(models.Model):
name = models.CharField('Название', max_length=255)
email = models.ForeignKey('authentication.User', on_delete=models.PROTECT)

Подскажите, как решить данную проблему? Использую generics.CreateAPIView.

19 ответов

103 просмотра

У тебя это фк, нужно либо передавать id, либо переопределить логику сохранения

Андрей-🐍 Автор вопроса

Спасибо. Как я могу переопределить логику сохранения?

https://docs.djangoproject.com/en/3.2/topics/db/models/#overriding-model-methods

у тебя фк на юзера который в реквесте? просто в сериалайзер передай email=request.user

Андрей-🐍 Автор вопроса

Так я же не вызываю сериалайзер, структура json такая: email: "", name: "", description: "" class ProductListSerializer(serializers.ModelSerializer): class Meta: model = Product fields = ('name', 'email', 'description') class ProductView(generics.CreateAPIView): queryset = Product.objects.all() serializer_class = ProductListSerializer permission_classes = (permissions.AllowAny,) Вот View + Serializers. В json лежит сам email. Попробую переопределить метод create.

Андрей-🐍 Автор вопроса

Не подскажите, как именно надо переопределить логику сохранения? Я пробовал через to_internal_value, также через get_email, но что-то не получается. То ругается на кодировку, то на то, что у модели Product, нет поля email. Заранее благодарю.

так, давай уточним, в поле email у тебя сейчас уходит имя текущего пользователя, или любого?

Андрей-🐍 Автор вопроса

В json, который прилетает с фронта - лежит email данного пользователя.

Андрей-🐍 Автор вопроса

Уходит?

тебе не обязательно что-либо ложить в это поле, тебе нужно переопределить метод в твоей вьюхе отвечающий за создание сущности и там в сериализатор передавать пользователя в поле email, как я уже писал выше

Андрей-🐍 Автор вопроса

Рассматривал данный вариант, хорошо, сейчас попробую. Ещё раз спасибо.

что-то в этом духе должно быть https://dpaste.org/t2QK

Андрей-🐍 Автор вопроса

Должен ли я выносить поле email за Meta? class ProductListSerializer(serializers.ModelSerializer): email = serializers.CharField() class Meta: model = Product fields = ('name', 'description', 'email')

нет

Андрей-🐍 Автор вопроса

serializer = self.serializer_class(**request.data, email=request.data['email']) Error: TypeError: shop.serializers.ProductListSerializer() got multiple values for keyword argument 'email' Полагаю, что в serializers, надо переопределить какую-то функцию, не подскажите - какую?

я как написал? ты осознай ошибку, у тебя в поле должна храниться ссылка на связанный объект, а ты туда пытаешься запихнуть строку, я не спроста там request.user поставил

Андрей-🐍 Автор вопроса

Кхм... Та в этом и проблема, даже если я туда передаю request.user, то та же самая ошибка. Не совсем понимаю, что хранится в request.user.

покажи с юзером, и покажи ошибку

Андрей-🐍 Автор вопроса

Наткнулся на проблему с авторизацией, полагаю, что именно из-за этого и не работает. Я передаю токен, но Django всё равно определяет пользователя, как AnonymousUser. Либо же отдаёт ошибку: {"detail":"Учетные данные не были предоставлены."} Сейчас попробую пофиксить.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
61
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Как добавить ссылку в Быстрый доступ в Проводнике windows 10? Нашёл, как на power shell сделать, но может есть способ через Дельфи?
А
31
Привет всем. Не знаю, удачный ли чатик я выбрал для вопроса, но он как будто в целом про концепцию фп и конкретно про Haskell. Прочитал, что в целом в мире фп нет идеи мутабел...
Gellert Cringewald
15
@helgispbru @Dreamer_0x01 @Pathologic93 @webber_12 Не уверен, что вам всем это жутко интересно, но в продолжение недавнего диалога отправлю свои наброски. Хочу понять, правил...
Андрей [aharito] Харитонов
13
Карта сайта