当前,我的TaskList对象通过外键连接到TaskItem对象(TaskItems在称为task_items的列表中)。我可以在Shell中将项目添加到列表中,但是谈到序列化器时,我还无法弄清楚如何连接这两个实体。 request.data对象和serializer.data对象与DB API命令不兼容。
是否可以创建TaskItem对象,然后将其添加到TaskList中的task_items外键属性?如果是这样,最好的方法是什么?
我正在尝试类似的目标:
task1 = TaskItem(任务名称=“做早餐”,难度级别= 2) task1.save()
taskList = TaskItem.objects.get(user = pk)#从函数参数获取用户主键 taskList.task_items.add(task1) taskList.save()
models.py
class TaskItem(models.Model):
task_name = models.CharField(max_length=200)
difficulty_level = models.IntegerField(default=1)
def __str__(self):
return self.task_name
class TaskList(models.Model):
list_name = models.CharField(max_length=200)
user = models.ForeignKey(User, on_delete=models.CASCADE)
task_items = models.ManyToManyField(TaskItem)
def __str__(self):
return self.list_name
serializers.py
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = TaskItem
fields = '__all__'
class TaskListSerializer(serializers.ModelSerializer):
TaskItem = TaskSerializer()
class Meta:
model = TaskList
fields = '__all__' # list_name, user, task_items
views.py
@api_view(['POST'])
def addTask(request, pk):
user = User.objects.get(id=pk)
taskList = TaskList.objects.select_related().filter(user=user).first()
taskListSerializer = TaskListSerializer(taskList)
serializer = TaskSerializer(data=request.data)
if serializer.is_valid() and taskListSerializer.is_valid():
serializer.save()
return Response(serializer.data)