根据来自不同模型的另一个模型字段填充模型字段

时间:2020-10-18 03:21:12

标签: python django django-models

我试图基于Accounts模型中的“ beginning_balance”来填充Transaction模型中的“ balance”,但出现以下错误消息:

save()缺少2个必需的位置参数:“ request”和“ pk”

我在做什么错。谢谢。

models.py

from django.db import models

class Accounts(models.Model):
    account_nickname = models.CharField(max_length=15, unique=True)
    beginning_balance = models.DecimalField(max_digits=12, decimal_places=2)
    
    def __str__(self):
        return self.account_nickname


class Transaction(models.Model):
    transaction_date = models.DateField()
    account_nickname = models.ForeignKey(Accounts, on_delete=models.CASCADE)
    amount = models.FloatField()
    balance = models.FloatField(null=True, blank=True, editable=False)

    def save(self, request, pk):
        get_beginning_balance = Accounts.objects.get(id=pk)
        self.balance = get_beginning_balance
        super().save(request, pk, *args, **kwargs)

    def __str__(self):
        return self.account_nickname

这是正确的查询。我意识到我没有提取正确的数据。

   def save(self, *args, **kwargs):
        get_beginning_balance = 
 Accounts.objects.filter(account_nickname=self.account_nickname).values("beginning_balance")
        self.balance = get_beginning_balance
        super().save(*args, **kwargs)

2 个答案:

答案 0 :(得分:0)

我相信您最好在Transaction模型中的保存功能中尝试执行的操作最好在您的views.py文件中完成。您可以根据在url中作为int:pk传递的pk id来获得Accounts模型,例如:

def view_name(request,pk):

然后可以使用get_object_or_404获取所需的Accounts对象。然后,我将使用Transactions.objects.create(您的参数)创建您的帐户余额。它最终应该看起来像这样:

def view_name(request,pk):
acc=get_object_or_404(Accounts, account_nickname=sample_account_nickname)
Transaction.objects.create(transaction_date=sample_date, 
account_nickname=acc, 
amount=sample_amount)

祝你好运! :D

答案 1 :(得分:0)

您正在使用错误数量的参数覆盖Django Model保存功能。

如果您想在Django Admin中设置某些内容,则应覆盖适当的方法,在这种情况下,在ModelAdmin中使用save_model()是合适的

为save_model方法提供HttpRequest,一个模型实例,一个 ModelForm实例,以及基于是否添加的布尔值 或更改对象。覆盖此方法可以进行预处理或 保存后的操作。调用super()。save_model()保存对象 使用Model.save()。