在我的用户注册过程中,用户首先创建他们的帐户,然后创建一个 LIST 对象,然后被定向到他们刚刚创建的 LIST 对象的仪表板。为了实现这一点,我需要能够访问最近创建的 LIST 对象的 list_id,这样我就可以将它传递到下一个视图/模板中。list_id 是 LIST 表/类的主键,因此我不希望用户为此创建一个值——它会自动递增。这是模型中的字段:
class List(models.Model):
list_id = models.IntegerField(primary_key=True)
MySQL 中 list_id 的说明:
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| list_id | int(11) | NO | PRI | NULL | auto_increment |
这是视图:
@login_required
@permission_required('social_followup.add_list')
def user_create(request):
if request.method == 'POST':
list_form = forms.ListForm(request.POST)
if list_form.is_valid():
list_create = list_form.save()
messages.success(request, 'List {0} created'.format(list_create.list_id))
up, _ = UserProfile.objects.get_or_create(user=request.user, list_id=list_create)
return redirect(reverse('user_dashboard', args=(2,))) # 2 is just an example
else:
list_form = forms.ListForm()
return TemplateResponse(request, 'dashboard/create.html', {'list_form': list_form, })
None
但是,我发现当我不包含 list_id 作为表单的一部分时,我无法访问该属性(当 list_id 不是字段时,执行 list_create.list_id 返回)。在我的模板中,我隐藏了 list_id 字段,如下所示:
<div class="control-group {% if list_form.list_id.errors %}error{% endif %}">
<div class="controls">
{{ list_form.list_id.as_hidden }}
</div>
</div>
由于 list_id 是必需且隐藏的,因此表单不会验证,因为 list_id 没有值。但是,如果我将 list_id 作为字段删除,我似乎无法在我的视图中访问 list_id 属性。有没有办法用下一个 list_id 应该是什么来自动填充这个字段,以便我可以用 list_create.list_id 获取值,并保持该字段隐藏?还是有另一种方法可以实现这一目标?