ManyToMany with django leisure card

I am currently using the default CRUD operations provided by the django-rest-framework. It works well with normal models, but one of my models has many, many relationships with another tag model. Here is the code for the models

class ActivityType(models.Model):
    title = models.CharField(max_length=200)
    slug = models.CharField(max_length=250,unique=True)

    def __unicode__(self):
        return self.slug        

class Activity(models.Model):
    owner = models.ForeignKey('auth.user')
    title = models.CharField(max_length=200)
    slug = models.CharField(max_length=250,unique=True)
    description = models.TextField()
    tags = models.ManyToManyField(ActivityType)
    created = models.DateTimeField(auto_now_add=True, blank=True)

    def __unicode__(self):
        return self.slug

What I want to know is the best way to integrate DRF with the same, if possible, without writing all the CRUD operations from scratch.

+4
source share
1 answer

In your serializers.py

from rest_framework import serializers
from rest_framework import generics

from models import Activity
from models import ActivityType

class ActivityTypeSerializer(serializers.ModelSerializer):

    class Meta:
        model = ActivityType
        fields = ('id', 'title', 'slug')

class ActivitySerializer(serializers.ModelSerializer):

    tags = ActivityTypeSerializer(many=True, read_only=True)

    class Meta:
        model = Activity
        fields = ('id', 'owner', 'title', 'slug', 'description', 'tags', 'created')

in your views.py

from rest_framework import viewsets

from serializers import ActivitySerializer
from serializers import ActivityTypeSerializer

from models import Activity
from models import ActivityType

class ActivityViewSet(viewsets.ModelViewSet):
    queryset = Activity.objects.all()
    serializer_class = ActivitySerializer

class ActivityTypeViewSet(viewsets.ModelViewSet):
    queryset = ActivityType.objects.all()
    serializer_class = ActivityTypeSerializer

and in your urls.py

from rest_framework.urlpatterns import format_suffix_patterns
from rest_framework import routers, serializers, viewsets
from rest_framework import generics
from rest_framework import viewsets, routers  

from your_app.views import ActivityTypeViewSet
from your_app.views import ActivityViewSet

router = routers.DefaultRouter()

router.register(r'activitytypes', ActivityTypeViewSet)  
router.register(r'activities', ActivityViewSet)

Also make sure restframework urls are included as described in the docs

 urlpatterns = patterns('',

 # your other urls 

     url(r'^api/$', include('rest_framework.urls', namespace='rest_framework')),
     url(r'api/accounts/', include('rest_framework.urls', namespace='rest_framework')),

 ) 
+5
source

All Articles