2015-06-23 28 views
6

Lütfen benimle birlikte olunuz. Ben sadece django-rest-framework'u öğreniyorum. Ve gerçekten onu ele geçiremiyorum.Şablonlarda django-rest-framework ile çalışma şekli

modeli:

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 görünüm: Bir serializers.py dosyası düzenlendi

def home(request): 
    days = Day.objects.all() 

    return render(request, 'test.html', { 
     'days':days 
    }) 

: Kayboldum Bundan sonra

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') 

. url('^api/$')'a gittiğimi farz edelim, Day'in json nesnelerini ve ilgili nesnesini nasıl alabilirim?

Temelde bu ben görüntülenmesini istediğiniz nasıl: Şimdi şablonda yukarıda gibi görünmek için django-dinlenme-çerçeve ile nasıl çalışabileceğini

enter image description here

.

güncelleme

ben böyle bir şey yapmak istiyorum

:

  1. bir url giderek json nesneleri alın (örn: /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 
          } 
         ] 
        } 
    ] 
    
  2. Nesneleri yönetme

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>') 
      }); 
     } 
    }); 
}) 

cevap

7

model.py kullanmayın:

serializers.py olarak
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) 

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') 

Diziselleştiricinizi kullanarak bir django görünümü yazın. senin urls.py olarak

@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) 

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

Neden APIView'i içe aktardınız? Ve evet bana günlerce nesneler veriyor, ama her gün de todo ihtiyacım var. Bunu nasıl yaparım? Teşekkür ederim. – Kakar

+0

Lütfen düzenlenmiş kodu kontrol edin –

+0

Evet. Beklendiği gibi! Teşekkür ederim. Sadece bir şey daha var, muhtemelen sadece 10 Day nesnesi ve 5 ToDo nesnesi, muhtemelen görüşlerde var mı? – Kakar

0

dinlenme çerçeve bir tarayıcıda görüntülenen html hizmet etmek amaçlanmıştır değildir.

Django DİNLENME çerçeve güçlü ve esnek bir aracıdır: Başka bir hizmet (bir mobil cihaz, bir ağır istemcisi, bir başka sunucu, vb) documentation ait

Birinci satır veri hizmet etmek hedeflenmiştir Bu, Web API'leri oluşturmayı kolaylaştırır. Bir tarayıcıda sonucu görüntülemek istiyorsanız

, şablonları kullanmak ve geri kalan

+0

Evet, biliyorum.İstediğim bu. Json formatında olmasını istediğimi varsayalım ve eğer 'url ('^api/$ ') 'ye gidersem, Günlerin listesini ve ilgili nesnesini nasıl alabilirim? – Kakar

+0

http://www.django-rest-framework.org/tutorial/2-requests-and-responses/ –

+0

Evet. Bence bu kadar. Güncellemelerime bakıp bana nasıl rehberlik edeceksiniz. Teşekkür ederim. – Kakar