xyz*_*ace 2 forms django hidden
我遇到的问题是我正在尝试创建一个表单,通过将其嵌入ModelForm中的隐藏字段中来传递当前登录的用户ID.
我的模特:
class Portfolios(models.Model):
id = models.AutoField(primary_key=True)
port_name = models.CharField(max_length=135, blank=True)
port_type = models.ForeignKey(PortType, null=True, db_column='port_type', blank=True)
user = models.ForeignKey(User)
def __unicode__(self):
return self.port_name;
class Meta:
db_table = u'tbl_portfolios'
Run Code Online (Sandbox Code Playgroud)
我的表格:
class PortfoliosCreateForm(ModelForm):
class Meta:
model = Portfolios;
Run Code Online (Sandbox Code Playgroud)
我的模板:
<form action="" method="post">
{% csrf_token %}
{% for field in form %}
<div class="create_form_field">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<input type="submit" value="Create" /></p>
</form>
Run Code Online (Sandbox Code Playgroud)
我使用通用的创建视图调用模板:
url(
r'^portfolios/create/$',
'django.views.generic.create_update.create_object',
dict(
form_class=PortfoliosCreateForm,
post_save_redirect='/',
template_name='portfolios/create.html'
)
Run Code Online (Sandbox Code Playgroud)
)
如何在该表单中最好地嵌入用户ID,以便它通过隐藏字段?或者我应该简单地传入一个虚拟字段并在自定义保存功能中填入值?
编辑:用户模型是内置的Django用户模型.
谢谢
Jak*_*cil 13
表单提交后,从请求中获取当前用户会更安全.您可以将通用视图重写为以下内容:
from django.shortcuts import redirect, render
def create_portfolio(request):
if request.method == 'POST':
form = PortfoliosCreateForm(request.POST)
if form.is_valid():
portfolio = form.save(commit=False)
portfolio.user = request.user # The logged-in user
portfolio.save()
return redirect('/')
else:
form = PortfoliosCreateForm()
return render(request, 'portfolios/create.html', {'form': form})
url(r'^portfolios/create/$', create_portfolio)
class PortfoliosCreateForm(ModelForm):
class Meta:
model = Portfolios;
exclude = ['user'] # Will be taken from the request
Run Code Online (Sandbox Code Playgroud)