Насколько низка видимость модели для пользователя?
Как сделать так, чтобы только создатель модели мог ее видеть, а другие участники не могли ее видеть, то есть человек, создавший модель, мог видеть ее только со своего аккаунта, а с другого аккаунта человек видел только свой
У меня есть модель models.py
class Product(models.Model):
username = models.CharField(max_length=100)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
email = models.EmailField(max_length=254)
image = models.ImageField(upload_to='media/', blank=True, null=True)
company_name = models.CharField(max_length=100)
def __str__(self):
return self.username
views.py
class ProductListView(ListView):
model = Product
queryset = Product.objects.all()
template_name = 'products_list.html'
class ProductDetailView(DetailView):
model = Product
class NewProductView(LoginRequiredMixin,CreateView):
template_name = 'product_form.html'
model = Product
form_class = NewProductForm
success_url = reverse_lazy('product_list_page')
class EditProductView(LoginRequiredMixin ,UpdateView):
template_name = 'product_form.html'
model = Product
form_class = EditProductForm
success_url = reverse_lazy('product_list_page')
как сделать так, чтобы она была видна только тому, кто ее создал, чтобы другой пользователь видел только свою модель, которую он создал. Как ограничить видимость модели только для ее создателя?
В первую очередь в модель Product нужно включить внешний ключ для пользователя, это лучше, чем просто сохранять имя пользователя.
Модель продукта:
user = models.ForeignKey(User, on_delete=models.CASCADE)
Затем в представлении списка вы можете фильтровать с помощью:
def get_queryset(self):
return Product.objects.filter(user=self.request.user).all()