我正在为我的邻居制作一个网站,而我几乎完成了。但是他又增加了一个功能,我似乎无法全神贯注于构建。该功能本身非常简单,我已经编写了它。他只是想要一个带相册的照相馆。他网站上的每个供应商都会有自己的相册。
但是我遇到的问题是,他希望每个供应商的特定用户都可以访问这些专辑的CRUD,而不能访问其他任何东西。如果我尝试在django admin中执行此操作,则该用户可以访问非他们的其他相册。所以我需要创建一些权限。我可以使用django中的组权限来执行此操作吗,因为django中的权限相当笼统,并不特定于其供应商名称或任何其他模型。我只希望他们能够在其供应商名称下访问和添加新项目。还是我需要使用其他工具并创建另一个视图?
Models.py供参考:
class Vendor(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=200, unique=True, null=True)
website = models.CharField(max_length=256)
city = models.CharField(max_length=100)
state = models.CharField(max_length=3)
vendor_email = models.CharField(max_length=100)
images = models.ImageField(upload_to='vendor_images', blank='img/92-thumb.jpg')
description = models.TextField()
def __str__(self):
return self.name
def save(self, *args, **kwargs):
# just check if product_model or vendor.name has changed
self.slug = slugify(self.name)
super(Vendor, self).save(*args, **kwargs)
class VendorAlbum(models.Model):
vendor = models.ForeignKey(Vendor, on_delete=models.PROTECT, related_name='vendor')
title = models.CharField(max_length=70)
description = models.TextField(max_length=1024)
thumb = ProcessedImageField(upload_to='albums', processors=[ResizeToFit(800)], format='JPEG',
options={'quality': 90})
tags = models.CharField(max_length=250)
is_visible = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(max_length=50, unique=True)
def __str__(self):
return self.title
class VendorAlbumImage(models.Model):
image = ProcessedImageField(upload_to='albums', processors=[ResizeToFit(1920)], format='JPEG',
options={'quality': 70})
thumb = ProcessedImageField(upload_to='albums', processors=[ResizeToFit(800)], format='JPEG',
options={'quality': 80})
album = models.ForeignKey(VendorAlbum, on_delete=models.PROTECT)
alt = models.CharField(max_length=255, default=uuid.uuid4)
created = models.DateTimeField(auto_now_add=True)
width = models.IntegerField(default=0)
height = models.IntegerField(default=0)
slug = models.SlugField(max_length=70, default=uuid.uuid4, editable=False)
def __str__(self):
return self.alt
答案 0 :(得分:0)
当您使用动态项目(例如相册)时,最好在视图中仅过滤与特定供应商相关的相册,然后再将其显示在Crud模板中,它将使用Django权限,但可以通过Django权限进行控制视图。