Как вывести для кого заказан товар на 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.

Вернуться на верх