【发布时间】:2018-07-27 02:49:45
【问题描述】:
这是我的更新视图。因为我刚刚开始使用 django。我是新手
views.py
@method_decorator(login_required, name='dispatch')
class ProductUpdateView(UpdateView):
fields = ('product_name', 'product_cost')
model = Product
def form_valid(self, form):
product = get_object_or_404(Product, pk=self.object.pk)
user = self.request.user
if user == product.created_by or user.is_superuser:
pass
else:
raise Http404() #I tried this but it didn't work
我创建了一个超级用户和一个用户。超级用户应该能够更新他和其他人的所有产品,但用户应该只能更新他的产品。
urls.py
urlpatterns = [
url(r'^product/(?P<pk>\d+)/update/$',
login_required(ProductUpdateView.as_view()), name='product_update'),
]
我使用超级用户创建了一个产品,它的 pk = 1。当我使用某个用户(不是超级用户)登录并访问上述网址时。此用户能够更新超级用户的产品。
models.py
class Product(models.Model):
product_name
product_cost # This two fields and created_by
created_by = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="Product", null=True)
有没有什么方法可以让拥有数据的人更新该数据,如果用户试图访问其他人的数据,它应该 Http404。
【问题讨论】:
标签: django django-forms django-class-based-views