मुझे यह समझने में थोड़ी परेशानी हो रही है कि नए CBV कैसे काम करते हैं। मेरा सवाल यह है, मुझे सभी दृश्यों में लॉगिन की आवश्यकता है, और उनमें से कुछ में, विशिष्ट अनुमतियाँ। फ़ंक्शन-आधारित विचारों में, मैं उस दृश्य में @permission_required () और login_required विशेषता के साथ ऐसा करता हूं, लेकिन मुझे नहीं पता कि नए विचारों पर यह कैसे करना है। क्या इसको समझाने वाले django डॉक्स में कुछ सेक्शन है? मुझे कुछ नहीं मिला। मेरे कोड में क्या गलत है?
मैंने @method_decorator का उपयोग करने की कोशिश की, लेकिन यह उत्तर देता है " TypeError at / रिक्त स्थान / prueba / _wrapped_view () कम से कम 1 तर्क (0 दिया गया) लेता है "
यहाँ कोड (GPL) है:
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required, permission_required
class ViewSpaceIndex(DetailView):
"""
Show the index page of a space. Get various extra contexts to get the
information for that space.
The get_object method searches in the user 'spaces' field if the current
space is allowed, if not, he is redirected to a 'nor allowed' page.
"""
context_object_name = 'get_place'
template_name = 'spaces/space_index.html'
@method_decorator(login_required)
def get_object(self):
space_name = self.kwargs['space_name']
for i in self.request.user.profile.spaces.all():
if i.url == space_name:
return get_object_or_404(Space, url = space_name)
self.template_name = 'not_allowed.html'
return get_object_or_404(Space, url = space_name)
# Get extra context data
def get_context_data(self, **kwargs):
context = super(ViewSpaceIndex, self).get_context_data(**kwargs)
place = get_object_or_404(Space, url=self.kwargs['space_name'])
context['entities'] = Entity.objects.filter(space=place.id)
context['documents'] = Document.objects.filter(space=place.id)
context['proposals'] = Proposal.objects.filter(space=place.id).order_by('-pub_date')
context['publication'] = Post.objects.filter(post_space=place.id).order_by('-post_pubdate')
return context