Django-rest-framework创建具有多对多关系的对象
问题描述:
我需要创建具有多对多连接到对象“任务”的关系的对象“标记”。我拥有此代码,并且不明白为什么它不会没有工作。我看到错误无法将关键字“任务”解析到字段中。选择是:id,名称,标签, P.S. 我靠这个帖子manyToMany with django rest frameworkDjango-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
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
方法中创建的嵌套序列器;
''中被TaskSerializer'标记为tag'场'READ_ONLY = TRUE',那么究竟应该如何工作的,当它的只读? – Matthew
这不是问题。如果我改变这种类型,我看到“无法解析关键字”任务'到字段“错误。 –
请修复粘贴的代码和错误消息。 fields =('id','name','')没有意义,你得到的错误与你粘贴的代码不符,这意味着你在标签模型上使用标签关系。 – Linovia