Я работаю над сайтом для моего соседа, и я почти полностью закончил. Но он добавил еще одну особенность, которую я не могу обернуть вокруг здания. Функция сама по себе довольно проста, и я уже написал ее. Он просто хотел фотогалерею с альбомами. У каждого продавца на его сайте будет свой собственный альбом.
Но проблема, с которой я сталкиваюсь, заключается в том, что он хочет, чтобы конкретные пользователи каждого поставщика имели доступ к 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