Python 德扬戈。将模型方法保存到不同的模型

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/

我有一个数据模型,我想把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/%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()