Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django——预填充隐藏字段_Python_Django_Django Forms_Django Views - Fatal编程技术网

Python Django——预填充隐藏字段

Python Django——预填充隐藏字段,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,在我的用户注册过程中,用户首先创建他们的帐户,然后创建一个列表对象,然后被定向到他们刚刚创建的列表对象的仪表板。为了实现这一点,我需要能够访问最近创建的列表对象的列表id,以便将其传递到下一个视图/模板中。list_id是list表/类的主键,因此我不希望用户为此创建值——它会自动递增。以下是模型中的字段: class List(models.Model): list_id = models.IntegerField(primary_key=True) MySQL中列表id的说明: +

在我的用户注册过程中,用户首先创建他们的帐户,然后创建一个列表对象,然后被定向到他们刚刚创建的列表对象的仪表板。为了实现这一点,我需要能够访问最近创建的列表对象的列表id,以便将其传递到下一个视图/模板中。list_id是list表/类的主键,因此我不希望用户为此创建值——它会自动递增。以下是模型中的字段:

class List(models.Model):
    list_id = models.IntegerField(primary_key=True)
MySQL中列表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, })
但是,我发现当我没有将list\u id作为表单的一部分时,我无法访问该属性(当list\u id不是字段时,执行list\u create.list\u id返回
None
)。在我的模板中,列表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_form.list_id.as_hidden}

由于list_id是必需的且是隐藏的,因此表单不会验证,因为list_id没有值。但是,如果将列表id作为字段删除,则似乎无法访问视图中的列表id属性。是否有一种方法可以用下一个list_id自动填充此字段,以便我可以用list_create.list_id获取值,并隐藏该字段?或者有其他方法可以实现这一点吗?

主键在调用
.save()
之前不存在。如果要在保存表单后访问PK,可以通过传递到模板来访问它

list\u form=forms.ListForm(instance=list\u create)

然后在你的模板中


{{list\u form.instance.id}

假设在实际创建列表时我正确地遵循,则您的表单中不需要
list\u id
。您能否将模型定义的相关部分(至少是列表id字段定义和实际创建它的任何内容,可能是保存方法)添加到问题中?我使用MySQL中的模型字段和字段描述更新了问题。如果
ListForm
是该模型的模型表单,而且您还没有对它的save方法做任何奇怪的事情,
list\u id
应该在您保存后立即显示在您的视图中。当对象写入数据库时,它将自动填充。但是,当我尝试在保存方法之后通过
list\u create.list\u id
访问该属性时,如果没有
list\u id
字段而不是
print list\u create.list\u id
计算为
None
,而不是
24
。那么,我是否试图错误地访问list_id属性?保存表单后不应出现这种情况,而不是将字段声明为主键。假设没有commit=false潜入某个地方或其他会改变保存行为的内容。