У меня есть простой DRF REST API, который я хочу использовать для создания статей блога.Я хочу иметь возможность добавлять теги к тем статьям блога, чтобы пользователи могли искать теги и просматривать соответствующие статьи.Однако теги могут еще не существовать.Я создал Article
модель с полем ForeignKey для 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 показывает это в виде раскрывающегося списка, который заполнен уже существующими тегами:
Как добавить или создать несколько Tag
s измоя Article
конечная точка API?
РЕДАКТИРОВАТЬ: В соответствии с запросом, я добавил мои 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)),
]