Как вывести для кого заказан товар на front в Django
Я скорее новичок в Django и мне нужна помощь. Я настроил, что когда каждый продукт заказан, каждый продавец (штатный пользователь) может видеть свой собственный продукт заказа, но ни один другой. Но как администратор я хочу видеть, кому отправляется заказанный товар. Вот мой код.
class Product(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.CASCADE) #many to one relation with Category
title = models.CharField(max_length=150)
image = models.ImageField(null=False, upload_to='images/')
price = models.DecimalField(max_digits=12, decimal_places=2,default=0)
amount = models.IntegerField(default=0)
detail = RichTextUploadingField()
slug = models.SlugField(null=False, unique=True)
def __str__(self):
return self.title
class OrderProduct(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField()
price = models.FloatField()
amount = models.FloatField()
def __str__(self):
return self.product.title
class OrderProductAdmin(admin.ModelAdmin):
list_filter = ['user', 'product', 'status']
readonly_fields = ('user', 'code', 'product', 'price','quantity','amount')
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return super().get_queryset(request).filter(product__user=request.user)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "order":
if request.user.is_superuser:
kwargs["queryset"] = User.objects.all()
else:
kwargs["queryset"] = User.objects.filter(username=request.user.username)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
То, что вы ищете - это группы.
Вы хотите создать группы, назначить CRUD разрешения группам, а пользователи будут наследовать эти разрешения на основе группы (групп), к которой они принадлежат. Вы можете создать группы на вашем администраторском сайте, models.py или из оболочки
Я бы посоветовал не давать многим пользователям доступ к вашей админке, а вместо этого создавать различные представления, которые наследуются от PermissionRequired или UserPassesTest миксинов, если вы используете cbv, или соответствующих декораторов, если вы используете fbv.