Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当通过django rest框架创建新的标记对象时,如何添加新标记(GenericRelation字段)?_Django_Django Rest Framework - Fatal编程技术网

当通过django rest框架创建新的标记对象时,如何添加新标记(GenericRelation字段)?

当通过django rest框架创建新的标记对象时,如何添加新标记(GenericRelation字段)?,django,django-rest-framework,Django,Django Rest Framework,以下是我的情况:我想构建一个带有标记问题模型的QA系统 我的型号代码是: class Question(models.Model): class Meta: ordering = ['-create_time'] title = models.CharField( verbose_name=_('标题'), max_length=50 ) content = models.TextField(

以下是我的情况:我想构建一个带有标记问题模型的QA系统

我的型号代码是:

class Question(models.Model):

    class Meta:
        ordering = ['-create_time']

    title = models.CharField(
        verbose_name=_('标题'),
        max_length=50
    )  
     content = models.TextField(
        verbose_name=_('内容'),
        max_length=2000
    )  
    tag = generic.GenericRelation(Tag)


class Tag(models.Model):    
    name = models.SlugField(_('tag'),max_length=10)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey("content_type", "object_id")
    user = models.ForeignKey(User)
    create_time = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name 
我的序列化程序是:

class QuestionCreateSerializer(serializers.HyperlinkedModelSerializer):
    tag = serializers.SlugRelatedField(many=True, slug_field='name')
    class Meta:
        model = Question
        fields = ('title','content','tag')
我的看法是:

class QuestionList(generics.ListCreateAPIView):
    queryset = Question.objects.all()
    serializer_class = QuestionCreateSerializer
当我访问我的api(“/…../api/questions/”)时,我得到的是django rest框架的一些标准输出

当我想发布一个新问题时,我只能选择一个已经存在的标签

我想要的是,客户可以发布一个新的问题,并附上他们喜欢的标签列表。如果发布的标记项是一个已存在的标记项,则将其添加到问题中,如果不是,则创建一个新标记以附加到问题中


那么,我可以向模型、序列化程序或视图添加什么逻辑呢?

我以前是如何为我的标记创建一个post视图的,只是使用从APIView继承的视图。需要发送的数据是问题id和由逗号分隔的字符串。我检索question对象,然后调用单词上的python拆分,然后迭代获取或创建每个标记的新标记。然后我将问题添加到for循环中的每个标记中。 类似的东西

class TagAPIView(APIView):
    def post(self, request):
        tags = request.DATA.get(u'tags', None)
        question = request.DATA.get(u'question', None)
        question = get_object_or_404(Question, id=question)
        tags = tags.split(',')
        for tag in tags:
            tag = Tag.objects.get_or_create(name='tag')
            tag.question_set.add(question)
        return Response(status=status.HTTP_201_created)

这不完全是你怎么做的,但这与我过去的做法非常相似

很多领域都无法解决?还是标签有类型?