Django models 很难弄清楚如何构建';服务';模型
这个主题相当简单,但在阅读了文档、示例和一些stackoverflow帖子之后,我仍然没有得出结论 假设我有两个模型,Django models 很难弄清楚如何构建';服务';模型,django-models,Django Models,这个主题相当简单,但在阅读了文档、示例和一些stackoverflow帖子之后,我仍然没有得出结论 假设我有两个模型,交易和服务。前者跟踪向实体支付的款项。要么是因为有人购买了产品(单步支付),要么是因为有人购买了服务(两步支付,一笔交易预付款,另一笔在向用户提供服务后支付) 一个服务正好有两个事务时刻,每个事务正好有一个服务。我应该使用ForeignKey、ForeignKey、Unique还是OneToOneField?我理解ForeignKey、Unique和OneToOneField非常
交易
和服务
。前者跟踪向实体支付的款项。要么是因为有人购买了产品(单步支付),要么是因为有人购买了服务(两步支付,一笔交易
预付款,另一笔在向用户提供服务后支付)
一个服务
正好有两个事务
时刻,每个事务
正好有一个服务
。我应该使用ForeignKey
、ForeignKey、Unique
还是OneToOneField
?我理解ForeignKey、Unique
和OneToOneField
非常相似,但不理解它们之间有多大区别,除了一个返回QuerySet
和另一个在进行反向查询时返回对象
有人能帮我弄清楚吗
我是否最好创建一个购买
模型,该模型将OneToOneField
用于交易,而服务
模型将OneToOneField
用于购买
,另一个OneToOneField
用于交易
提前谢谢
class Transaction(models.Model):
class Provider(models.TextChoices):
MBWAY = "MBW", _("MBWay")
PAYPAL = "PP", _("PayPal")
REVOLUT = "REV", _("Revolut")
DEBIT = "DCC", _("Debit or Credit Card")
class Status(models.TextChoices):
PENDING = "P"
PROCESSING = "PR"
ACCEPTED = "A"
REJECTED = "R"
EXPIRED = "E"
id = models.BigAutoField(primary_key=True, editable=False)
user = models.ForeignKey(User, on_delete=models.SET(User.get_sentinel_user()))
provider = models.CharField(max_length=8, choices=Provider.choices)
status = models.CharField(max_length=8, choices=Status.choices)
value = models.MoneyField(max_digits=19, decimal_places=4, default_currency="EUR")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
data = models.JSONField(default=dict)
class Service(models.Model):
id = models.BigAutoField(primary_key=True, editable=False)
user = models.ForeignKey(User, on_delete=models.SET(User.get_sentinel_user()))
signal = models.ForeignKey(
Transaction, unique=true, on_delete=models.PROTECT, related_name="service_signal"
)
remainder = models.ForeignKey(
Transaction, unique=true, on_delete=models.PROTECT, related_name="service_remainder"
)