如何在Django模型中使用@property?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Django模型中使用@property?相关的知识,希望对你有一定的参考价值。
我想在查询中添加一个子查询。然后在@property
中创建了一个Transaction
。在互联网上发现这就是我所需要的。但是我不完全了解它们是如何工作的。如何使用?
views.py(Query)
paymentsss = Transaction.objects.all().select_related('currency',
'payment_source__payment_type',
'deal__service__contractor',).
models.py
class PayerPaymentSource(models.Model):
id = models.BigIntegerField(blank=True, null=False, primary_key=True)
payer_id = models.BigIntegerField(blank=True, null=True)
payment_type = models.ForeignKey(PaymentType, max_length=64, blank=True, null=True, on_delete=models.CASCADE)
source_details = models.TextField(blank=True, null=True) # This field type is a guess.
class Meta:
managed = False
db_table = '"processing"."payer_payment_source"'
class Transaction(models.Model):
id = models.BigIntegerField(blank=True, null=False, primary_key=True)
currency = models.ForeignKey(Currency, null=True, on_delete=models.CASCADE)
deal = models.ForeignKey(Deal, null=True, on_delete=models.CASCADE)
# service_instance = models.ForeignKey(ServiceInstance, null=True, on_delete=models.CASCADE)
payment_source = models.ForeignKey(PayerPaymentSource, null=True, on_delete=models.CASCADE)
payment_date = models.DateTimeField(blank=True, null=True)
amount = models.IntegerField(blank=True, null=True)
status = models.CharField(max_length=255, blank=True, null=True)
context = models.TextField(blank=True, null=True)
@property
def bank_card_details(self):
return PayerPaymentSource.objects.filter(self.payment_source.source_details,
payment_type='bank_card_details')
class Meta:
managed = False
db_table = '"processing"."transaction"'
UPD:print(payment.bank_card_details)
有效,但它会创建许多类似的查询。如何解决?
答案
@ property装饰器只是调用内置在Python中的property()函数的便捷方法。该函数返回一个特殊的descriptor object,它可以直接访问该方法的计算值。
例如您的观点
obj = Transaction.objects.get(pk=pk)
#now you can get the bank_card_details like this:
print(obj.bank_card_details)
以上是关于如何在Django模型中使用@property?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 中使 @cached_property 无效
如何使用 DJango Rest Framework 上传多个图像?
使用 django_property_filter 但 PropertyChoiceFilter 在 Inactive 上无法匹配