【发布时间】:2018-10-28 01:40:50
【问题描述】:
我有一个简单的 DRF REST API,我想用它来创建博客文章。我希望能够为这些博客文章添加标签,以便用户可以搜索标签并查看相关文章。但是,标签可能还不存在。我创建了一个带有 ForeignKey 字段的 Article 模型到 Tag 模型,如下所示:
class Tag(models.Model):
name = models.CharField(max_length=32)
def _str__(self):
return self.name
class Meta:
ordering = ('name',)
class Article(models.Model):
title = models.CharField(max_length=256)
author = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.TextField()
date = models.DateTimeField(auto_now_add=True)
tags = models.ForeignKey(Tag, on_delete=models.CASCADE, blank=True, default=None)
def __str__(self):
return self.title
class Meta:
ordering = ('date', 'id')
理想情况下,我想要的是能够发布带有一组标签的新Article,如果任何标签不存在,请在数据库中创建它们。但是,就目前而言,标签需要已经存在才能添加到Article。从视觉上看,DRF 将其显示为一个下拉列表,其中填充了预先存在的标签:
如何从我的Article API 端点添加或创建多个Tags?
编辑:根据要求,我添加了我的views.py
views.py:
from api.blog.serializers import ArticleSerializer, TagSerializer
from rest_framework import viewsets
# /api/blog/articles
class ArticleView(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
# /api/blog/tags
class TagView(viewsets.ModelViewSet):
queryset = Tag.objects.all()
serializer_class = TagSerializer
为了完整起见,这里是我的 REST API 的 serializers.py 中的序列化程序。
serializers.py:
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = '__all__'
urls.py:
from rest_framework import routers
router = routers.DefaultRouter()
router.register('articles', views.ArticleView)
router.register('tags', views.TagView)
urlpatterns = [
path('', include(router.urls)),
]
【问题讨论】:
-
你的模型很好,但你可能需要对你的视图做一些工作。为什么不发布您的views.py?
-
好主意@RedCricket。我已经添加了我的观点。如果他们是常规的 CBV,我会很清楚如何做到这一点,但我对 DRF 有点陌生。
标签: python django django-rest-framework foreign-keys