Django-rest-framework创建具有多对多关系的对象 [英] Django-rest-framework Create object with relationship many-to many
本文介绍了Django-rest-framework创建具有多对多关系的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要创建对象标记,并将其与对象任务多对多关联。我有这段代码,不知道为什么它不起作用。我看到错误无法将关键字任务解析为字段。选项包括:ID,名称,标签,
P.S.
我依靠这篇文章 manyToMany with django rest framework
I need to create object "Tag" with relationship many-to-many attached to object "Task".I have this code and don't understand why it doesn't work. I see error Cannot resolve keyword 'task' into field. Choices are: id, name, tags, P.S. I relied on this post manyToMany with django rest framework
.models
class Tag(models.Model):
name = models.CharField(max_length=200)
def __str__(self):
return "{}".format(self.name)
class Task(models.Model):
name = models.CharField(max_length=200, blank=True)
tags = models.ManyToManyField(Tag)
def __str__(self):
return "{}".format(self.name)
.views
class TagCreateView(generics.ListCreateAPIView):
serializer_class = TagSerializer
def get_queryset(self):
queryset = Tag.objects.all()
task_id = self.kwargs.get('task_id', None)
if task_id is not None:
queryset = queryset.filter(task=task_id)
return queryset
def perform_create(self, serializer):
task_id = self.kwargs.get('task_id', None)
try:
tasks = Task.objects.get(task__id__exact=task_id)
except Task.DoesNotExist:
raise NotFound()
serializer.save(tag=tasks)
.serielizers
.serielizers
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = ('id', 'name','')
class TaskSerializer(serializers.ModelSerializer):
tag = TagSerializer(many=True, read_only=True)
class Meta:
model = Task
fields = ('id', 'name', 'tags')
read_only_fields = ('tags')
.urls
urlpatterns = {
url(r'^todolists/(?P<task_id>[0-9]+)/tags', TagCreateView.as_view(), name="tags")}
推荐答案
您需要处理序列化程序 create
方法中嵌套的序列化程序的创建;
You need to handle the nested serializers creation in the serializers create
method;
这篇关于Django-rest-framework创建具有多对多关系的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文