Django - выборка только связанного внешнего ключа в UpdateView и View
Посмотрите, пожалуйста, на эту установку ниже.
В форме продукта отображается поле названия и выпадающий список категорий. Однако в выпадающем списке отображаются все категории от всех пользователей, но мне нужно показать только собственные категории пользователя, например filter(user=request.user), но я не знаю, где разместить эту проверку (в форме или модели или в представлении) и как.
# models.py
class Product(models.Model):
name = models.CharField(max_length=200, null=False)
category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE, null=True, blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Category(models.Model):
name = models.CharField(max_length=200, null=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
# forms.py
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ['name', 'category']
# views.py
class ProductsView(View):
model = Product
form_class = ProductForm
initial = {}
template_name = "products_list.html"
def get(self, request, *args, **kwargs):
category_id = kwargs['category_id']
#### I need to do this check in 4 other models, could you recommend a beter way?
try:
# Check if user is allowed to view this category
category_obj = Category.objects.filter(
user=self.request.user).get(pk=category_id)
except Category.DoesNotExist:
return redirect('homepage')
# To add a new product form
form = self.form_class(initial=self.initial)
# There's another form on this page to add a category
form_category = ProductCategoryForm
return render(request, self.template_name, {'form': form, 'form_category': form_category, 'category': category_obj})
class ProductEditView(UpdateView):
model = Product
form_class = ProductForm
template_name = "product_edit.html"