我有一个模型Offlinecheckout和CartItem模型。我想在离线结帐模型中添加购物车字段的过滤查询集。由于它显示了所有用户的购物车。我想按request.user过滤queryset。这样,购物车字段将仅显示在购物车request.user中,而不显示在其他用户中。
如何在该字段中添加过滤器。
Models.py
class OfflineCheckOut(models.Model):
user = models.ForeignKey('accounts.User', on_delete=models.CASCADE)
cart = models.ManyToManyField('cart.CartItem')
time_slot = models.ForeignKey('category.TimeSlot', on_delete=models.CASCADE)
state = models.CharField(max_length=254)
city = models.CharField(max_length=254)
address = models.CharField(max_length=254)
landmark = models.CharField(max_length=254, blank=True)
# order_id = models.ForeignKey('cart.CartModel', on_delete=models.CASCADE)
date = models.DateField()
tsn_amount = models.IntegerField()
def __str__(self):
return self.user.username
class CartItem(models.Model):
cart = models.ForeignKey('CartModel', on_delete=models.CASCADE)
user = models.ForeignKey('accounts.User', on_delete=models.CASCADE)
service = models.ForeignKey('accounts.SubCategory', on_delete=models.CASCADE)
defects = models.ForeignKey('category.Defects', on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
price = models.IntegerField()
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now_add=True)
serializers.py
from rest_framework import serializers
from .models import Address, Date, OfflineCheckOut
class OfflineSerializer(serializers.ModelSerializer):
class Meta:
model = OfflineCheckOut
fields = "__all__"
views.py
class offlineViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
def get_queryset(self):
user = self.request.user
if user.is_authenticated:
if user is not None:
if user.is_active and user.is_superuser or user.is_Customer:
return OfflineCheckOut.objects.all()
raise PermissionDenied()
raise PermissionDenied()
raise PermissionDenied()
serializer_class = OfflineSerializer
答案 0 :(得分:0)
您可以在Django中使用FilteredRelation
来过滤关系
请按照以下步骤更改您的 views.py
from django.db.models import FilteredRelation, Q
class offlineViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
def get_queryset(self):
user = self.request.user
if user.is_authenticated:
if user is not None:
if user.is_active and user.is_superuser or user.is_Customer:
### Use filtered relation
return OfflineCheckOut.objects.filter(user=user).annotate(user_cart=FilteredRelation('cart', condition=Q(cart__user=user)))
raise PermissionDenied()
raise PermissionDenied()
raise PermissionDenied()
serializer_class = OfflineSerializer
我希望这可以帮助您解决问题。
有关更多信息,请参阅FilteredRelation objects。
如果您需要进一步的帮助,请发表评论