【问题标题】:How to Model Peer to Peer Transactions in Django?如何在 Django 中为点对点交易建模?
【发布时间】:2020-01-23 18:38:00
【问题描述】:

我正在尝试找出在我正在构建的电子商务网站中为用户之间的交易建模的正确方法。我希望交易对仪表板中的两个用户都可用。

将交易及其所有详细信息保存到两个用户对象似乎是不正确的。我想我需要为交易创建一个单独的模型,每个交易都有一个唯一的 id。然后,在每个用户的对象中,我可以简单地保存该事务 ID。

然后我是否会简单地为每笔交易提供两个主键,一个用于购买者的 user.id,一个用于购买者的 user.id?这是“多对多”吗?

感谢您的指导。

编辑 - 这是我尝试过的:

class Transaction(models.Model):
    owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    purchaser = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    create_time = models.DateField(auto_now=True)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)

但是,这会产生错误items.Transaction.owner: (fields.E304) Reverse accessor for 'Transaction.owner' clashes with reverse accessor for 'Transaction.purchaser'. HINT: Add or change a related_name argument to the definition for 'Transaction.owner' or 'Transaction.purchaser'.

【问题讨论】:

    标签: python django


    【解决方案1】:

    您应该为两个字段添加related_name 参数,每个字段都有自己的名称,例如:

    class Transaction(models.Model):
        owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name = 'transaction_owner')
        purchaser = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name = 'transaction_purchaser')
        create_time = models.DateField(auto_now=True)
        item = models.ForeignKey(Item, on_delete=models.CASCADE)
    

    更多上下文:Django: Why do some model fields clash with each other?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2022-07-17
      • 2017-04-03
      • 1970-01-01
      • 2020-10-24
      • 2017-11-26
      • 2018-11-20
      相关资源
      最近更新 更多