我正在尝试创建一个表单,允许当前登录的用户提交数据。 表单由字段组成-金额、利率(利息)、时间戳(自动拾取)和当前登录的用户。你知道吗
数据没有传递到数据库中,并给出了一个错误,如-视图investors.views.InvestView没有返回HttpResponse对象。结果却一个也没有。你知道吗
你知道吗视图.py你知道吗
def InvestView(request):
if request.method == 'GET':
investment_form = InvestorsForm(request.user)
context = {'investment_form': investment_form}
return render(request, 'investors/form.html', context)
if request.method == 'POST':
investment_form = InvestorsForm(request.POST or None, instance=request.user)
if investment_form.is_valid():
amount = investment_form.cleaned_data['amount']
interest = investment_form.cleaned_data['rate']
saving = investment_form.save(commit=False)
# Passing Logged in user
investor = request.user
print(investor)
saving.investor = request.user.id
saving.save()
messages.success(request, f'New Investment Done!')
return redirect('/myinvest/')
你知道吗表单.py你知道吗
class InvestorsForm(forms.ModelForm):
class Meta :
model = Investment
fields = ['amount', 'rate']
def __init__(self, user, *args, **kwargs):
self.user = user
super(InvestorsForm, self).__init__(*args, **kwargs)
你知道吗型号.py你知道吗
class Investor(models.Model):
name = models.CharField(max_length=99)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Investment(models.Model):
amount = models.FloatField(blank=False)
rate = models.FloatField(blank=False)
timestamp = models.DateField(default=datetime.now)
investor = models.ForeignKey(Investor, on_delete=models.CASCADE)
def __str__(self):
return str(self.investor)
数据必须存储到数据库中,同时将页面重定向到myinvest部分。你知道吗
此问题与添加用户无关。这是因为在验证失败的情况下你什么都不做。你知道吗
你应该把你的函数反过来,以便渲染是在所有情况下命中。你知道吗
注意压痕。你知道吗
验证的实际失败是因为您已将表单的签名更改为首先接受
user
参数,而不是预期的data
。但是,不清楚为什么要这样做,因为您不使用该值,而是在视图中设置用户。您应该删除__init__
方法。你知道吗您需要用
saving.investor.user = request.user
替换saving.investor = request.user.id
。你知道吗另一个错误:窗体的
__init__
方法将user
作为其第一个参数:对于GET请求,您可以正确地传递它:
但当你发出一个POST请求时,你就忘了:
通过请求用户作为第一个论点,也应该有所帮助。你知道吗
相关问题 更多 >
编程相关推荐