Я использую ModelViewSet и Modelserializer для проекта, подобного блогу.
Могут возникнуть трудности с пониманием реализации; Я не могу заставить работать действие update через , вызывая его через маршрутизатор , только действие списка работает с указанным мною маршрутом.
Когда я добавляю URL: 127.0.0.1:8000/api/blogs/1
, чтобы вернуть блог с идентификатором 1 для редактирования , он возвращает {"Detail": "Not Found."}
.
Это мое мнение:
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
Я также переопределил методы сохранения и обновления в классе сериализатора, не знаю, нужен ли он для ModelViewSet в ModelSerializer.
class ArticleSerializer(serializers.ModelSerializer):
def create(self, validated_data):
article = Article.objects.create(
article_title = self.validated_data['article_title'],
article_content = self.validated_data['article_content'],
...
)
return article
def update(self, instance, validated_data):
instance.article_title = validated_data.get('article_title', instance.article_title)
instance.article_content = validated_data.get('article_content', instance.article_content)
...
instance.save()
return instance
class Meta:
model = Article
fields = ...
И файл urls.py
:
router = DefaultRouter()
router.register(r'blogs', ArticleViewSet, basename='articles-list')
urlpatterns = router.urls
Мой вопрос: 1. Как мне указать URL-адреса для действий ModelViewSet (в моем случае действие update
)? 2. Будет ли достаточно определения только одного URL-адреса всеми моими потребностями при каждых действиях ModelViewSet? если да как?
Что я делаю не так? Я новичок в DRF.