You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Django Rest Framework Examples - For my Tutorial Group
models.py
import uuid
from django.db import models
class ActiveManager(models.Manager):
"""Returns only undeleted objects."""
def get_queryset(self):
return super().get_queryset().filter(deleted_at__isnull=True)
class Item(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
deleted_at = models.DateTimeField(null=True, blank=True)
name = models.CharField(max_length=120)
content = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
objects = models.Manager()
active = ActiveManager()
class Meta:
ordering = ['-created_at']
def __str__(self):
return self.name
def soft_delete(self):
"""Marks the object as deleted by setting deleted_at."""
self.deleted_at = models.DateTimeField.now()
self.save()
serializers.py
from rest_framework import serializers
from .models import Item
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = '__all__' # exposes id, name, price, created_at
views.py
from rest_framework import viewsets
from .models import Item
from .serializers import ItemSerializer
class ItemViewSet(viewsets.ModelViewSet): # gives list, create, retrieve, update, destroy
queryset = Item.objects.all()
serializer_class = ItemSerializer
items/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import ItemViewSet
router = DefaultRouter()
router.register(r'items', ItemViewSet) # creates /items/ and /items/<uuid>/
urlpatterns = [
path('', include(router.urls)),
]
items/apps.py
from django.apps import AppConfig
from rest_framework.routers import DefaultRouter
from .views import ItemViewSet
class ItemsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'items'
router = DefaultRouter()
router.register(r'items', ItemViewSet)
# convenience property so the root URLconf can iterate easily
@property
def api_urls(self):
return self.router.urls
project/urls.py
from django.contrib import admin
from django.urls import path, include
from django.apps import apps
api_urlpatterns = []
for app_config in apps.get_app_configs():
api_urls = getattr(app_config, 'api_urls', None)
if api_urls:
api_urlpatterns.append(path('', include(api_urls)))
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/', include(api_urlpatterns)),
]