我搜索了SO和Django文档,似乎无法找到它.我正在扩展django.contrib.comments应用程序的基本功能,以使用我的webapp中的自定义权限系统.对于审核操作,我尝试使用基于类的视图来处理对注释和权限检查的基本查询. (在此上下文中的"EComment"是我的"增强评论",继承自基础django评论模型.)
我遇到的问题comment_id是从urls.py中的URL传入的kwarg.如何从基于类的视图中正确检索?
现在,Django正在抛出错误TypeError: ModRestore() takes exactly 1 argument (0 given).代码包括在下面.
urls.py
url(r'restore/(?P<comment_id>.+)/$', ModRestore(), name='ecomments_restore'),
Run Code Online (Sandbox Code Playgroud)
views.py
def ECommentModerationApiView(object):
def comment_action(self, request, comment):
"""
Called when the comment is present and the user is allowed to moderate.
"""
raise NotImplementedError
def __call__(self, request, comment_id):
c = get_object_or_404(EComment, id=comment_id)
if c.can_moderate(request.user):
comment_action(request, c)
return HttpResponse()
else:
raise PermissionDenied
def ModRestore(ECommentModerationApiView):
def comment_action(self, request, comment):
comment.is_removed = False
comment.save()
Run Code Online (Sandbox Code Playgroud) 可能重复:
Django基于类的DeleteView示例
下班后搜索我只是不知道如何使用DeleteView.抱歉我的傻瓜?有人可以举个例子吗?
url( r'^del/$', DeleteFormView.as_view( ) ),
class DeleteFormView( BaseDeleteView ):
model = user_info
context_object_name = "user_info_list"
Run Code Online (Sandbox Code Playgroud)
必须使用对象pk或slug调用DeleteFormView
这个错误总是存在什么是错误的?
我想将一个数字传递给我的通用视图(DetailView)来获取一个对象这是我的代码
URLPATTERN
(r'^newreportview/(?P<number>\w+)/$', NewReportView.as_view()),
Run Code Online (Sandbox Code Playgroud)
查看课程
class NewReportView(DetailView):
template_name = "report/newreportview.html"
context_object_name = "newreportview"
def get_queryset(self):
task= get_object_or_404(MyTask,applicationnnumber=self.args[0])
return task
Run Code Online (Sandbox Code Playgroud)
我猜这一行有些不对劲
name = get_object_or_404(MyTask,applicationnnumber=self.args[0])
Run Code Online (Sandbox Code Playgroud)
错误信息:
Exception Type: IndexError
Exception Value:
tuple index out of range
Run Code Online (Sandbox Code Playgroud)
我应该如何将'number'传递给这个通用视图并获取带有这个'number'的Mytask对象?
谢谢
示范:
from django.views.generic.base import View
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
class TestView(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return HttpResponse('haha')
Run Code Online (Sandbox Code Playgroud)
urls.py是
url(r'^test/', TestView.as_view()),
Run Code Online (Sandbox Code Playgroud)
所以当GET你可以看到haha,但在POST时你会得到一个空白页...
我在这里错过了什么?
编辑:澄清我在做什么.我正在编写一个JSON流CURD视图,我需要以各种方式解析JSON.其中之一是当ppl POST数据具有某种模式时,视图将调度到视图内的另一个方法并返回一些东西.但结果却没有回报.所以我告诉你最小的PoC.请帮我解决我的代码错误.TIA!
顺便说一下可能的相关问题
为什么我不能在DetailView中访问从url字符串传递的kwargs ['party_id']?
Test url: http://127.0.0.1:8000/party/3/activity/2/
Run Code Online (Sandbox Code Playgroud)
url(r'^party/(?P<party_id>\d*)/activity/(?P<pk>\d*)/$', ActivityView.as_view(), name='activity')
Run Code Online (Sandbox Code Playgroud)
class ActivityView(DetailView):
template_name = "ooe/activity_results.html"
context_object_name = "activity"
model = Activity
def get_context_data(self, **kwargs):
context = super(ActivityView, self).get_context_data(**kwargs)
#this line is not working because kwargs is just: {'object': <Activity: Activity 2>}
context['submissions'] = self.get_object().get_submissions(kwargs['party_id'])
return context
@method_decorator(user_passes_test(active_participant))
def dispatch(self, *args, **kwargs):
return super(ActivityView, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud) 所以这是我写的一个简单的观点.
class PostTestView(View):
def post(self, request, *args, **kwargs):
print request.POST
return HttpResponse("Hello there")
Run Code Online (Sandbox Code Playgroud)
我urls.py对以上观点有这一行:
url(r'^test/create$',PostTestView.as_view(), name='app.views.create_test')
Run Code Online (Sandbox Code Playgroud)
但是405 Http error当我试图击中时,我得到了一个http://127.0.0.1:8000/app/test/create
这显然意味着我的方法post不在定义的方法列表中.但我在我看来已将其定义如上.这可能有什么问题?我很无能为力
python django post http-status-code-405 django-class-based-views
如何访问网址中的“参数”一词:
operations_product_search/?q=parameter
Run Code Online (Sandbox Code Playgroud)
这里:
ASearchView(ListView)类:
...
def get_queryset(self, **kwargs):
q = self.kwargs["q"] <--- This is not working
Run Code Online (Sandbox Code Playgroud) 无法弄清楚为什么CreateView不回来HttpResponse.现在,我使用此视图仅用于发布(无GET).我认为那套self.success_url应该足够了(你可以看到def post).
class TripCreationView(CreateView):
form_class = TripCreationForm
template_name = 'frontend/homepage.html'
def post(self, request, *args, **kwargs):
self.success_url = request.POST.get('success_url') or reverse('frontend:homepage')
super(TripCreationView, self).post(self, request, *args, **kwargs)
#
# def form_valid(self, form):
# trip = form.save(self.request)
# return HttpResponseRedirect(self.success_url)
def get_form_kwargs(self):
kwargs = super(TripCreationView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
Run Code Online (Sandbox Code Playgroud)
你知道该怎么办吗?
我不知道如何找到解决方案,但让我们从头开始。
这些是我的模型:
class Animal(models.Model):
SPECIES = (
("DOG", "DOG"),
("CAT", "CAT"),
)
species = models.CharField(max_length=4, choices=SPECIES)
name = models.CharField(max_length=20)
weight = models.PositiveSmallIntegerField(null=False, blank=False)
age = models.PositiveSmallIntegerField(null=False, blank=False)
color = models.CharField(max_length=10)
isill = models.BooleanField(null=False)
isagressive = models.BooleanField(null=False)
isadopted = models.BooleanField(null=False)
isreturned = models.NullBooleanField()
whichbox = models.CharField(max_length=5)
photo = models.ImageField(null=True, blank=True)
def __str__(self):
return self.name
class MedicalHistory(models.Model):
animal = models.ForeignKey(Animal, on_delete=models.CASCADE)
disease = models.CharField(max_length=100)
medicine = models.CharField(max_length=20, null=True, blank=True)
therapy = models.CharField(max_length=50)
howmuchmed = models.CharField(max_length=50)
daterecord = models.DateField
def __str__(self):
return self.disease …Run Code Online (Sandbox Code Playgroud) 如何为CBV编写通用的Mixin,以便查询集只返回登录用户拥有的数据?
django有可能吗?
如果是......有人可以给我具体的建议或答案如何在django中执行此操作...
谢谢