我有以下Django模型:
class Lesson(models.Model):
title = models.TextField()
class Course(models.Model):
lessons = models.ManyToManyField(Lesson)
class User(AbstractUser):
favorites = models.ManyToManyField(Lesson)
我有一条路线/ courses / course_id,该路线返回的课程详细信息包括一系列课程(使用Django Rest Framework)
如何根据用户的收藏夹在课程对象中返回其他属性收藏夹。
我尝试了以下操作:
course = self.get_object(course_id)
favorites = request.user.favorites
for lesson in course.lessons.all():
if lesson in favorites.all():
lesson.favorite = True
serializer = CourseDetailSerializer(course, context=serializer_context)
return Response(serializer.data)
但是返回时不起作用:
(django.core.exceptions.ImproperlyConfigured:字段名称
favorite
是 对于模型Lesson
无效。
我的序列化器:
class CourseDetailSerializer(serializers.HyperlinkedModelSerializer):
lessons = LessonListSerializer(many=True, read_only=True)
class Meta:
model = Course
fields = ('id', 'lessons', 'name', 'title')
class LessonSerializer(serializers.ModelSerializer):
class Meta:
model = Lesson
fields = ('id', 'title', 'duration', 'favorite')
答案 0 :(得分:0)
如果未定义对象,则无法向其添加属性,例如:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id=add>add button</button>
<div id="container"></div>
创建m2m关系时:
lesson.favorite = True
... django创建虚拟模型,该虚拟模型仅存储两个模型中的主键对。这种关系在数据库中可能看起来像这样:
favorites = models.ManyToManyField(Lesson)
我想您想要实现的是添加有关此关系的更多信息。 因此,您需要使用该额外字段创建中介模型,即:
id | user_id | lesson_id
------+---------------+----------
151 | 11 | 3225
741 | 21 | 4137
答案 1 :(得分:0)
您的lesson
模型不包含favourite
布尔值,因此调用lesson.favorite = True
时无法设置布尔值
如果要消除错误,请尝试:
class Lesson(models.Model):
title = models.TextField()
favorite = models.BooleanField(initial=False)
尽管这些课程似乎不是针对特定用户的。因此,此解决方案可能不是您要寻找的解决方案,因为如果仅 ,它将为 所有 个用户将“课程”的“收藏夹”字段设置为true一个 用户将其设置为收藏。