【问题标题】:Trying to use a Model method in View Django尝试在查看 Django 中使用模型方法
【发布时间】:2021-07-23 21:45:07
【问题描述】:

所以我正在开发这个项目(一个库存应用程序)。我试图在我的视图中使用这个模型方法。在我看来,我正在尝试称呼它。

但我总是收到错误消息:“QuerySet”对象没有“get_quantities_sold”属性

这是我的模型:

generate_ref_no = str(uuid.uuid1())

class Transaction(models.Model):
    business = models.ForeignKey(Business_Account, on_delete=models.CASCADE)
    customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True)
    amount = models.FloatField()
    productSold = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
    quanties_of_product_sold = models.IntegerField()
    transaction_date = models.DateTimeField(auto_now_add=True)
    payment_method = models.CharField(choices=PAYMENT_METHOD, max_length=50)
    reference_num = models.CharField(max_length=50, editable=False, default=generate_ref_no)

    def __str__(self):
        return f'{self.customer} '


    def get_quantities_sold(self,quantities_sold):
        return print(quantities_sold)

我的看法:

class TransactionView(generics.GenericAPIView):
  def post(self,request, business=None):
      serializer = TransactionSerializer(data=request.data)
      if serializer.is_valid():
              serializer.save()
              getTransaction = Transaction.objects.filter(reference_num=serializer.data['reference_num'])
              getTransaction_serializer = TransactionSerializer(getTransaction, many=True)
              getTransaction.get_quantities_sold(serializer.data['quanties_of_product_sold '])
              return Response(data=serializer.data, status=status.HTTP_201_CREATED)
      else:
          return Response(data=serializer.errors, status=status.HTTP_404_NOT_FOUND)

我正在尝试从我的事务视图中的事务模型调用“get_quantities_sold”方法,但出现错误:QuerySet 对象没有属性“get_quantities_sold”

【问题讨论】:

  • getTransaction 是一个 QuerySet,因此是一个 collection 项目,而不是单个项目,因此 getTransaction.get_quantities_sold 没有意义。

标签: python django django-models django-rest-framework django-views


【解决方案1】:

getTransaction 在你的方法中是一个QuerySet,因此是一个集合项,而不是单个项,因此getTransaction.get_quantities_sold 没有意义。您可以使用.get(…) [Django-doc] over .filter(…) [Django-doc] 检索单个Transaction 对象:

getTransaction = Transaction.objects.get(
    reference_num=serializer.data['reference_num']
)

也许还值得保证reference_num 的唯一性:

reference_num = models.CharField(
    max_length=50,
    editable=False,
    default=generate_ref_no,
    unique=True
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2013-12-16
    相关资源
    最近更新 更多