微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我尝试在 DRF 中访问外键属性时,“str”对象没有属性“isComplete”

如何解决当我尝试在 DRF 中访问外键属性时,“str”对象没有属性“isComplete”

首先,我是 DRF 的新手。我搜索错误,但我不知道哪里有 str 属性。据我了解,它将 OrderItemViewSet 中的订单和产品作为字符串获取,但它们指的是带有外键的其他类。

这是我的views.py

class OrderItemViewSet(viewsets.ModelViewSet): 
queryset = OrderItem.objects.all()
serializer_class = OrderItemSerializer
detail_serializer_class = OrderItemDetailSerializer
filter_backends = (DjangoFilterBackend,OrderingFilter,)
ordering_fields = '__all__'

def get_serializer_class(self):
    if self.action == 'retrieve':
        if hasattr(self,'detail_serializer_class'):
            return self.detail_serializer_class
    return super().get_serializer_class()

def get_queryset(self):
    queryset = OrderItem.objects.all()
    product = self.request.query_params.get('product',None)
    order = self.request.query_params.get('order',None)
    if product is not None:
        product = product.album_name()
        queryset = queryset.filter(product__album_name=product)
    if order is not None:
        order = order.isComplete()
        queryset = queryset.filter(order__isComplete = order)
    return queryset

def create(self,request): #parse incoming request or add new order item
    message = request.data.pop('event')
    if message == "NewOrderItem":
        event = request.data.pop('event')
        product = event.pop('product')
        orders = event.pop('orders')[0] #only one order
        customer = orders.pop('order') #not sure about selections
        product = Product.objects.create(**product)
        orders = Order.objects.create(**orders,product=product) #not sure

        orders.customer.create(**user)
        order = Order.objects.create(**event,product=product,order=orders)
        return Response(status=status.HTTP_201_CREATED)

models.py

class Product(models.Model):
model_no = models.CharField(max_length=200,blank=True,null=True)
album_name = models.CharField(max_length=200,null=True)
artist_name = models.CharField(max_length=200,null=True)
description = models.CharField(max_length=200,null=True)
genre = models.CharField(max_length=200,null=True)
warrantry = models.CharField(max_length=200,null=True)
distributor = models.CharField(max_length=200,null=True)
price = models.CharField(max_length=200,null=True)
stock = models.CharField(max_length=200,null=True)
image = models.CharField(max_length=200,null=True)

def get_absolute_url(self):
    return reverse('product-detail-view',args[str(self.id)])

def __str__(self):
    return(self.album_name)


class Order(models.Model):
customer = models.ForeignKey(User,on_delete=models.SET_NULL,null=True,related_name = 'customer_user')
order_date = models.DateTimeField(auto_Now_add=True)
isComplete = models.BooleanField(default=False,blank=False)
transaction_id = models.CharField(max_length=200,blank=False)

def __str__(self):
    return str(self.id)

@property
def getCartTotal(self): #returns total price of items in the order
    orderItems = self.orderitem_set.all()
    totalCost = sum([item.getTotal for item in orderItems])
    return totalCost

@property
def getCartItems(self): # returns amount of items in the order
    orderItems = self.orderitem_set.all()
    totalItems = sum([item.quantity for item in orderItems])
    return totalItems
    
class OrderItem(models.Model):
product = models.ForeignKey(Product,null=True)
order = models.ForeignKey(Order,null=True)
quantity = models.IntegerField(default=0,blank=True)
date_added = models.DateTimeField(auto_Now_add=True)

def current_order(self):
    return Order.objects.filter(order=self.order)

@property
def getTotal(self):
    totalCost = self.product.price * self.quantity
    return totalCost

serializers.py

class ProductSerializer(serializers.ModelSerializer):

class Meta:
    model = Product
    fields = ('model_no','album_name','artist_name','description','genre','warrantry','distributor','price','stock','image')


class UserSerializer(serializers.ModelSerializer):

def create(self,validated_data):
    user = User.objects.create_user(**validated_data)
    return user

class Meta:
    model = User
    fields = (
        'username','first_name','last_name','email','password',)
    validators = [
        UniquetogetherValidator(
            queryset=User.objects.all(),fields=['username','email']
        )
    ]


class OrderSerializer(serializers.ModelSerializer):
customer = UserSerializer(many=True)
class Meta:
    model = Order
    fields = ('customer','order_date','isComplete','transaction_id')


class OrderItemSerializer(serializers.ModelSerializer):
class Meta:
    model = OrderItem
    fields = ('id','url','product','order','quantity','date_added')


class OrderItemDetailSerializer(serializers.ModelSerializer):
product = ProductSerializer()
order = OrderSerializer()
class Meta:
    model = OrderItem
    fields = ('id','date_added')

提前致谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。