当通过django rest框架创建新的标记对象时,如何添加新标记(GenericRelation字段)?
以下是我的情况:我想构建一个带有标记问题模型的QA系统 我的型号代码是:当通过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(
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)
这不完全是你怎么做的,但这与我过去的做法非常相似 很多领域都无法解决?还是标签有类型?