How to work with django-rest-framework in templates

Please carry me. I am just learning django-rest-framework . And I really can’t capture him.

Model:

class Day(models.Model): date = models.DateField(default=date.today) class ToDo(models.Model): date = models.ForeignKey(Day) name = models.CharField(max_length=100) very_important = models.BooleanField(default=False) finished = models.BooleanField(default=False) 

normal view:

 def home(request): days = Day.objects.all() return render(request, 'test.html', { 'days':days }) 

Created the serializers.py file:

 class DaySerializer(serializers.ModelSerializer): class Meta: model = Day field = ('id', 'date') class ToDoSerializer(serializers.ModelSerializer): date = DaySerializer() class Meta: model = ToDo field = ('id', 'date', 'name', 'very_important', 'finished') 

After that I lost. Suppose I go to url('^api/$') , how do I get the json objects of Day and its associated object?

Basically this is how I want to be displayed:

enter image description here

Now, how can I work with the django-rest-framework to look as shown in the template.

update

I would like to do something like this:

  • Get json objects by going to the url (ex: /api/.json)

     [ { "id": 1, "date": "2015-06-23", "day_todo_set": [ { "id":5 "name": "Bloom", "very_important": True, "finished": False }, { "id":4 "name": "REST", "very_important": True, "finished": True } ] }, { "id": 2, "date": "2015-06-22", "day_todo_set": [ { "id":3 "name": "Alarm 1", "very_important": True, "finished": True }, { "id":2 "name": "Meet up with SIS", "very_important": True, "finished": False }, { "id":1 "name": "Buy Milk", "very_important": True, "finished": False } ] } ] 
  • Manipulate objects

JS:

 $(function () { var $days = $('#days') $.ajax({ type: 'GET', url: '/api/.json', success: function(days) { $.each(days, function(i, day) { $days.append('<li>date: '+ day.date+ '</li>') }); } }); }) 
+6
source share
2 answers

model.py:

 class Day(models.Model): date = models.DateField(default=date.today) def get_todo_list(self): return self.day_todo_set.order_by('-id')[:5] class ToDo(models.Model): date = models.ForeignKey(Day, related_name="day_todo_set") name = models.CharField(max_length=100) very_important = models.BooleanField(default=False) finished = models.BooleanField(default=False) 

In serializers.py

 class ToDoSerializer(serializers.ModelSerializer): class Meta: model = ToDo field = ('id', 'date', 'name', 'very_important', 'finished') class DaySerializer(serializers.ModelSerializer): day_todo_set = ToDoSerializer(many=True, source="get_todo_list") class Meta: model = Day field = ('id', 'date', 'day_todo_set') 

Write a django view using your serializer.

 @csrf_exempt def day_list(request): """ List all code snippets, or create a new snippet. """ if request.method == 'GET': snippets = Day.objects.order_by('-date')[:10] serializer = DaySerializer(snippets, many=True) return JSONResponse(serializer.data) 

In your urls.py

 url(r'^api/$', views.day_list, name='days_list') 
+7
source

The rest framework is not intended to serve the html displayed in the browser. It is designed to serve data to another service (mobile device, heavy client, other server, etc.).

First line of documentation :

The Django REST framework is a powerful and flexible toolkit that makes it easy to create web APIs.

If you want to display the result in a browser, use templates and do not use the rest

0
source

Source: https://habr.com/ru/post/989591/


All Articles