我有以下客户详细信息模型,每个客户都有不同的付款方式(例如现金、在线转账等...):
class Customer(models.Model):
#some customer details
class Payment(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.RESTRICT, related_name='payments')
payment_mode = models.CharField(max_length=255, blank=True, null=True)
并且我想添加一个新的发票模型以包含客户以及客户的付款方式。
class Invoice (models.Model):
customer = models.ForeignKey(Customer, on_delete=models.RESTRICT, related_name='payments')
payment_mode = models.ForeignKey(Customer.payments.payment_mode, on_delete=models.RESTRICT)
我将为客户创建发票,并将输入客户可用的付款方式。但是发票的付款方式给了我一个 AttributeError: 'ReverseManyToOneDescriptor' object has no attribute 'payment_mode'。
我可以知道如何设置对客户子数据的引用吗? 谢谢。
答案 0 :(得分:0)
您所拥有的不是有效的字段定义。
您可以直接引用Payment
payment_mode = models.ForeignKey(Payment, on_delete=models.RESTRICT)
答案 1 :(得分:0)
为什么甚至需要 Invoice
模型?现有模型中已有相同的字段。
您可以简单地创建一个视图来执行此操作。
例如,
def show_invoice(request, pk):
# this pk value should be sent by your frontend and represents your Primary Key value for the current customer
customer = Customer.objects.get(pk=pk)
return render(request, 'some_html_page.html', {'customer': customer})
现在在您的 some_html_page.html
中,您可以使用我们刚刚传递的渲染函数 ({'customer': customer}
) 的“上下文”来显示您想要的详细信息。
Django 中的模型应该被认为是 SQL 中的表;您不应该每次想要“推断”某些东西时都创建一个新的,而是应该在想要“存储”某些东西(或规范化现有表/模型)时创建它们。 Invoice
模型不会做这两件事。
您可以阅读本文以了解如何在 Django 中编写视图 this.
如果您确实想要制作 Invoice 模型,则不需要制作 payment_mode
字段,因为您已经指向 Customer 模型,而该模型又指向 Payment模型。