Добавить новый элемент в поле многие ко многим через api в Django - PullRequest
1 голос
/ 11 июля 2020
• 1000 / api / customer / like_product / Объект 'ReturnDict' не имеет атрибута 'like_products'

Вот мой API:

@csrf_exempt
def updated_liked_products(request):
    customer = get_user(request)
    if not customer:
        return JsonResponse({'invalid token'})

    customer_details = CustomerDetailSerializer(CustomerDetails.objects.get(
    customer=customer)).data
    
    customer_details.liked_products.add(request.data['prodId'])
    customer_details.save()

    return JsonResponse({"success": 'updated'})

Модель с данными о клиенте:

  age = models.IntegerField(default="21", blank=True)
    address = models.CharField(
        default='', max_length=254, null=True, blank=True)
    nick_name = models.CharField(
        default='', max_length=254, blank=True)
    average_order = models.FloatField(default="0.0", blank=True)
    completed_orders = models.IntegerField(default="0", blank=True)
    customer = models.ForeignKey(
        Customer, on_delete=models.CASCADE)
    customer_type = MultiSelectField(
        choices=CUSTYPE, default=CUSTYPE, max_length=100)
    current_selfie = models.ImageField(
        upload_to='sefies/', blank=True, default='')
    email_confirmed = models.BooleanField(default=False)
    last_signin = models.DateTimeField(default=timezone.now)
    liked_products = models.ManyToManyField('Product')
    needs_help_with = MultiSelectField(
        choices=CATEGORIES, max_length=1000, default='')
    phone = models.CharField(

Я использую Postman для обновления таких данных, чтобы я мог видеть поле понравившегося продукта, но не могу получить к нему доступ:

введите описание изображения здесь

1 Ответ

1 голос
/ 11 июля 2020

У вас возникла эта ошибка, потому что вы пытаетесь получить доступ к атрибуту liked_products в сериализованном data, который является экземпляром ReturnDict, а не CustomerDetails.

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

@csrf_exempt
def updated_liked_products(request):
    customer = get_user(request)
    if not customer:
        return JsonResponse({'invalid token'})

    customer_details = CustomerDetails.objects.get(customer=customer)
    
    customer_details.liked_products.add(request.data['prodId'])

    return JsonResponse({"success": 'updated'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...