如何解决当我尝试在 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 举报,一经查实,本站将立刻删除。