我试图基于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)
答案 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()。