Django REST框架:创建对象并将外键与序列化器连接

时间:2020-09-26 16:14:30

标签: django django-rest-framework

当前,我的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)

0 个答案:

没有答案