Django Rest Framework中与用户相关的字段具有多对多关系

温格

在我的应用程序中,我有一些产品,并且已登录的用户应该能够将这些产品标记为收藏。

我将它们建模为我中的多对多关系models.py,如下所示:

class Product(models.Model):
    product_name = models.CharField(max_length=200)
    # ...


    def __unicode__(self):
        return self.product_name


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    favorites = models.ManyToManyField(Product)

    @receiver(post_save, sender=User)
    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.get_or_create(user=instance)

    @receiver(post_save, sender=User)
    def save_user_profile(sender, instance, **kwargs):
        instance.profile.save()

我现在想要实现的是,在产品详细信息视图上,用户可以查看该产品是否已经是他的最爱,并且应该能够选中一个框使其成为他的最爱。

在模型级别上,这是多对多关系,但在视图上,它更多是布尔关系(当前用户最喜欢的是/否)。

我已经设法将喜欢的状态显示在详细信息视图中,并带有 SerializerMethodField

class ProductSerializer(serializers.ModelSerializer):
    # ...
    favorite = serializers.SerializerMethodField()

    def get_favorite(self, obj):
    try:
        self.context['request'].user.profile.favorites.get(pk=obj.pk)
        return True
    except Product.DoesNotExist:
        return False

我目前正在努力的是使用此设置将收藏夹添加到当前用户的收藏夹列表中,因为它SerializerMethodField是只读的,因此不会出现在update()方法的validated_data中

是否有人对此或类似问题有解决方案?

一次

您可以创建自定义字段。

class FavoriteField(serializers.BooleanField):

    def get_attribute(self, instance):
        return self.context['request'].user.profile.favorites.filter(pk=instance.pk).exists()

class ProductSerializer(serializers.ModelSerializer):
    favorite = FavoriteField()

    def update(self, instance, validated_data):
        instance = super().update(instance, validated_data)
        is_favourite = validated_data.get('favorite')  # can be None
        if is_favourite is True:
            self.context['request'].user.profile.favorites.add(instance)
        elif is_favourite is False:
            self.context['request'].user.profile.favorites.remove(instance)
        return instance

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django Rest Framework 获取一对多关系中的其他相关字段

来自分类Dev

Django Rest Framework实现多对多关系

来自分类Dev

Django Rest Framework:只需获取多对多关系的某些值

来自分类Dev

使用具有许多关系的Post方法的Django Rest-Framework错误

来自分类Dev

Django Rest Framework:按用户相关字段排序

来自分类Dev

从具有一对多关系的 Django 表中查询相关字段

来自分类Dev

Django Rest Framework如何基于ID保存具有相关字段的模型

来自分类Dev

在django rest框架中保存与数据库有多对多关系的django模型

来自分类Dev

django-rest-framework多对多关系。如果不存在则创建

来自分类Dev

在Django中批量创建具有多对多关系的对象

来自分类Dev

带有额外字段的Django Rest Framework用户注册

来自分类Dev

Django Rest Framework:管理关系

来自分类Dev

Django Rest Framework嵌套关系

来自分类Dev

Django rest_framework关系

来自分类Dev

Django Rest Framework中的关系条件检查

来自分类Dev

将新记录添加到 django rest 框架中的多对多关系

来自分类Dev

Django Rest框架关系

来自分类Dev

Django REST空字段

来自分类Dev

Django Rest Framework and JSONField

来自分类Dev

Django Rest Framework API

来自分类Dev

Django Rest Framework的ModuleNotFoundError

来自分类Dev

Django Rest Framework序列化器-返回相关字段

来自分类Dev

ValueError:变量需要具有字段“id”的值才能使用这种多对多关系 - Django

来自分类Dev

Django Rest Framework 3.0:保存嵌套的多对一关系

来自分类Dev

如何使用 Django-Rest-Framework 将现有对象分配到多对一关系中?

来自分类Dev

Django Rest Framework从ForeignKey关系返回单个字段

来自分类Dev

Django-rest-framework序列化多个没有相关字段的查询

来自分类Dev

相关字段上的Django REST API查询

来自分类Dev

如何在Spring Data REST中创建具有独特的多对多关系的资源?

Related 相关文章

  1. 1

    Django Rest Framework 获取一对多关系中的其他相关字段

  2. 2

    Django Rest Framework实现多对多关系

  3. 3

    Django Rest Framework:只需获取多对多关系的某些值

  4. 4

    使用具有许多关系的Post方法的Django Rest-Framework错误

  5. 5

    Django Rest Framework:按用户相关字段排序

  6. 6

    从具有一对多关系的 Django 表中查询相关字段

  7. 7

    Django Rest Framework如何基于ID保存具有相关字段的模型

  8. 8

    在django rest框架中保存与数据库有多对多关系的django模型

  9. 9

    django-rest-framework多对多关系。如果不存在则创建

  10. 10

    在Django中批量创建具有多对多关系的对象

  11. 11

    带有额外字段的Django Rest Framework用户注册

  12. 12

    Django Rest Framework:管理关系

  13. 13

    Django Rest Framework嵌套关系

  14. 14

    Django rest_framework关系

  15. 15

    Django Rest Framework中的关系条件检查

  16. 16

    将新记录添加到 django rest 框架中的多对多关系

  17. 17

    Django Rest框架关系

  18. 18

    Django REST空字段

  19. 19

    Django Rest Framework and JSONField

  20. 20

    Django Rest Framework API

  21. 21

    Django Rest Framework的ModuleNotFoundError

  22. 22

    Django Rest Framework序列化器-返回相关字段

  23. 23

    ValueError:变量需要具有字段“id”的值才能使用这种多对多关系 - Django

  24. 24

    Django Rest Framework 3.0:保存嵌套的多对一关系

  25. 25

    如何使用 Django-Rest-Framework 将现有对象分配到多对一关系中?

  26. 26

    Django Rest Framework从ForeignKey关系返回单个字段

  27. 27

    Django-rest-framework序列化多个没有相关字段的查询

  28. 28

    相关字段上的Django REST API查询

  29. 29

    如何在Spring Data REST中创建具有独特的多对多关系的资源?

热门标签

归档