Python 德扬戈。将模型方法保存到不同的模型
我有一个数据模型,我想把amount的值和total_amount的值保存到payment method中,以便将支付记录保存到数据库中 **数据/模型.py**Python 德扬戈。将模型方法保存到不同的模型,python,django,orm,model,Python,Django,Orm,Model,我有一个数据模型,我想把amount的值和total_amount的值保存到payment method中,以便将支付记录保存到数据库中 **数据/模型.py** class Data(models.Model): """ Model of Data""" user = models.ForeignKey(User, on_delete=models.CASCADE) document = models.FileField(upload_to='documents/%Y/
class Data(models.Model):
""" Model of Data"""
user = models.ForeignKey(User, on_delete=models.CASCADE)
document = models.FileField(upload_to='documents/%Y/%m/%d')
uploaded_at = models.DateTimeField(auto_now_add=True)
amount = models.DecimalField(default=0, max_digits=6, decimal_places=2,
blank=True, null=True)
def total_amount(self):
return Data.objects.filter(user=self.user).aggregate(Sum('amount'))['amount__sum']
付款/型号.py
class Payment(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField()
created = models.DateTimeField(auto_now=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)
amount = models.DecimalField(default=0, max_digits=6, decimal_places=2,
blank=True, null=True)
付款/views.py
def payment_create(request):
user = request.user
data = Data.objects.filter(user=user)
if request.method == 'POST':
form = PaymentCreateForm(request.POST)
if form.is_valid():
payment = form.save()
return render(request,
'payments/created.html',
{'payment': payment})
else:
form = PaymentCreateForm()
# template and context
template = 'payments/create.html'
context = {'form': form,
'data': data
}
return render(request,
template,
context
)
信号是实现类似目标的一个好选择。使用
post\u save
信号,您可以在创建新的数据
时调用函数,并且可以在那里创建支付
实例:
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Data)
def create_payment(sender, instance, created, **kwargs):
if created:
# instance points to the new Data object created
Payment.objects.create(amount=instance.total_amount()) # and any extra data you need
我编辑问题并将视图放在.py中。我想将数据模型金额也保存到付款方式金额中。谢谢,很快就可以解决我的问题了。但是我想要的是当用户填写付款表单时,从数据中获取总金额。总金额将自动保存到付款金额。您是指
数据的金额字段
模型还是付款的金额字段
模型?你可以在信号中同时做这两件事。无论是为另一个模型创建新实例,还是使用instance.amount=instance.total\u amount()
然后使用instance.save()