【发布时间】:2018-05-18 16:46:21
【问题描述】:
例如,我有一个模型,将水果作为苹果、香蕉和橙子存储在一个篮子中(每个单独的实例都将是一个篮子)。
class Project(models.Model):
apples = models.DecimalField('Apples!', decimal_places=2, max_digits=7)
oranges = models.DecimalField('Oranges!', decimal_places=2, max_digits=7)
bananas = models.DecimalField('Bananas!', decimal_places=2, max_digits=7)
用例:
数据库中有 A、B 和 C 的苹果、橙子和香蕉,分别放在不同的篮子里。 用户按下单独的篮子进行更新,得到他的苹果、橙子和香蕉田。 他在数据库中输入了 X 个苹果、Y 个橙子和 Z 个香蕉。
现在有 A+X 苹果、Y+B 橙子和 C+Z 香蕉。换句话说,用户不只是更新水果的数量,而是简单地添加它们(暂时不减去)
问题是,当试图覆盖 forms.py 中的 save() 方法时,我似乎无法正确访问篮子的当前实例,因此,当前 -把水果放在篮子里。使用我的编程添加进行更新,但我无法获得初始值。我该怎么做?
class BasketForm(ModelForm):
class Meta:
model = Basket
fields = ['apples', 'oranges', 'bananas']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.add_input(Submit('submit', 'UPDATE'))
def save(self, commit=True):
self.instance.actual_design = self.cleaned_data.get('actual_design') // this didnt work
current_project = self.instance.actual_design // this didnt work
print(self.instance.apples) // returns already inputted X amount of apples
add = super(BasketForm, self).save(commit=False)
if commit:
add.save()
return add
【问题讨论】:
-
这通常不是表单的责任,而是视图的责任:您将实例作为参数传递给表单。我觉得你在这里使用
Decimals 而不是Integers 很奇怪。 -
这是我当前任务的要求。所以你是说我在视图中尝试这个比较幸运?
标签: python django django-forms