基于不同模型中的另一个模型字段填充模型字段



我正在尝试填充"余额";在基于"交易"的交易模型中;beginning_balance";在Accounts模型中,但我收到以下错误消息:

save((缺少2个必需的位置参数:"request"one_answers"pk">

我做错了什么。非常感谢。

型号.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)

我相信,您在事务模型中的保存函数中尝试做的事情最好在views.py文件中完成。你可以根据在你的url中作为int:pk传递的pk-id来获得账户模型,比如

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

您使用错误数量的参数覆盖Django Model保存函数。

如果你想在Django Admin中设置一些东西,你应该覆盖正确的方法,在ModelAdmin中,save_model()将是合适的

save_model方法被赋予HttpRequest,一个模型实例ModelForm实例,以及基于是否添加的布尔值或者改变对象。重写此方法允许执行pre-or保存后操作。调用super((.save_model((保存对象使用Model.save((.

最新更新