2016-04-04 18 views
0

Bir ekibin çeşitli oyuncularını görüntüleyen bir sayfam var. Konfigürasyonda takımlar arasında geçiş yapabilirsiniz, yani TEAM_NAME = 'test''u koyarsanız test ekibini açıkça yükler. Sorun şu ki, TEAM_NAME = 'test2''u koyarsanız, bu ekip için başlıyor, ancak yine de ekipler arasında geçiş yapmak için URL'yi değiştirebiliyorum (yalnızca seçtiğim takımı görüntüleyebilmem gerekirken)Django belirli nesneler için erişimi kısıtlıyor

URL görünüyor http://127.0.0.1:8000/team/1/player/, 1, test olan ilk oluşturulmuş takım olur.

Görünümü yüklediğimde, geçerli görünümün ekibinin yapılandırmadaki ekiple aynı olup olmadığını görmek için bazı izin denetimlerine sahip olmak isterim.

Bu görünümdür:

class PlayerList(ListView): 

    model = player_model 
    template_name = 'player_list.html' 

    def get_team(self): 
     if not hasattr(self, '_team'): 
      team_id = self.kwargs.get('team_id') 
      self._team = team_model.objects.get(pk=self.kwargs.get('team_id')) 
     return self._team 

    def get_context_data(self, *args, **kwargs): 
     context = super().get_context_data(*args, **kwargs) 
     context['team'] = self.get_team() 
     return context 

    def get_queryset(self, *args, **kwargs): 
     queryset = super().get_queryset(*args, **kwargs) 
     return queryset.filter(team_id=self.kwargs.get('team_id')) 

    def get(self, request, *args, **kwargs): 
     return super(PlayerList, self).get(request, *args, **kwargs) 

cevap

1

Sen engellemek için get yönteminde/erişime izin bunu yapabilir:

from django.core.exceptions import PermissionDenied 

def get(self, request, *args, **kwargs): 
    team_id = self.kwargs.get('team_id') 
    team = team_model.objects.get(pk=team_id) 
    if team.name != TEAM_NAME: 
     raise PermissionDenied 
    else: 
     return super(PlayerList, self).get(request, *args, **kwargs) 
+0

yaradı! Biraz uyar, ama bu cevap için teşekkürler – dnsko

İlgili konular