【问题标题】:How to open a form in editable mode如何在可编辑模式下打开表单
【发布时间】:2013-07-25 11:59:58
【问题描述】:

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    phone_daytime = models.CharField(max_length=50, null=True, blank=True)

class User(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email =  models.CharField(max_length=75)
    password =  models.CharField(max_length=75)

views.py

def profile(request):
    """"""
    registerform = UserRegisterForm(request.POST)
    createprofileform = UserCreateProfileForm(request.POST)      
    if registerform.is_valid() and createprofileform.is_valid():                
        result = registerform.save(commit=False)
        result.set_password(request.POST['password'])                                   
        result.save()
        member.user_id = user.id
        member.member_id = result.id
        member.save()                                        
        member_profile = UserProfile.objects.get(user=result.id)
        createprofileform = UserCreateProfileForm(request.POST, instance=member_profile)
                createprofileform.save()   
    return render(request,'profile.html',{'createprofileform':createprofileform,'registerform':registerform})

查看将数据保存到数据库。

模板

<tr>
   <td>First name:</td><td>{{registerform.first_name}}</td>
 </tr>
 <tr>
    <td>Last name:</td><td>{{registerform.last_name}}</td>
 </tr>
 <tr>
    <td>Daytime phone:</td><td>{{createprofile.phone_daytime}} </td>
 </tr>
 <tr>
    <td>Email:</td><td>{{registerform.email}} </td>
 </tr>
 <tr>
    <td>Password</td><td>{{registerform.password}} </td>
 </tr>   

保存的姓名和邮箱id这样显示在模板中,

  <td> <input type="submit" name="delete" value="{{list.0.id}}" class="delete_reporter" /></span>
<a href="{{list.0.id}}">{{list.0.first_name|title}} {{list.0.last_name}}</a></td>
 <td> {{list.0.email}} {{list.1.phone_daytime}} {{list.1.phone_mobile}}</td>

在模板中,如果我单击&lt;a href="{{list.0.id}}"&gt;{{list.0.first_name|title}} {{list.0.last_name}}&lt;/a&gt;,表单应该以可编辑模式打开,这样如果我想进行更改,我可以更改并再次保存。如何在 django 中执行此操作。我在 @ 中传递 id 987654326@标签。

【问题讨论】:

  • 只读表单有什么意义?表单始终是可编辑的,极少数例外。您应该阅读模型表单以实现您正在寻找的内容
  • 我想以可编辑模式在同一页面中打开它,我没有使用不同的 html 进行编辑,都以相同的方法进行,最初我将数据添加到表单。如何构建 url 以及如何将 id 传递给查看。
  • 我尝试使用表单实例,我对在 url 和视图中提供 id 感到困惑,我收到页面未找到错误(404)
  • 我要问的是,上面的视图代码是用于在数据库中插入数据。在数据库中添加了一行数据。在模板中,插入的数据被视为给定的问题,如果我点击此链接 {{list.0.first_name|title}} {{list.0.last_name}} 来自模板,数据无论我添加的是可编辑模式下同一表单字段中的视图,以便我可以添加和更新数据。您可以猜到,当您单击 SO 问题或答案中的编辑链接时,相同的问题或答案以可编辑模式打开,这就是我要查找的内容。请您指导我如何做

标签: python django django-models django-forms django-templates


【解决方案1】:

如果我理解你是正确的,你想要一些可以编辑和保存的数据。 您可以借助表格来实现这一点。这是一个例子:

定义你的表单:

class BasicForm(forms.Form):
    name = forms.CharField()
    age = forms.IntegerField()

然后,在您的视图中定义您的逻辑并为您的表单提供初始数据:

def update_view(request):
    initial_data = {'name': 'John', 'age': 25}
    form = BasicForm(initial_data)

    if request.method == 'POST':
          form = BasicForm(request.POST)
          if form.is_valid():
              #  Do something with passed data, for example update existing model.
              pass

    return render(request, 'template.html', {'form': form})

如果您想更新数据库中的模型,您可以提供如下初始数据:

from django.forms.models import model_to_dict

model = Model.objects.get(name='John')
initial_data = model_to_dict(model, exclude=['field_name'])

form = BasicForm(initial_data)

if request.method == 'POST':
      form = BasicForm(request.POST)
      if form.is_valid():
          #  Update your "John" model
          model.name = form.cleaned_data['name']
          model.age = form.cleaned_data['age']
          model.save()

看看django forms documentation

【讨论】:

  • 我要问的是,上面的视图代码是用于在数据库中插入数据。在数据库中添加了一行数据。在模板中,插入的数据被视为给定的问题,如果我点击此链接 {{list.0.first_name|title}} {{list.0.last_name}} 来自模板,数据无论我添加的是可编辑模式下同一表单字段中的视图,以便我可以添加和更新数据。这是我需要的,请指导我如何实现。
  • 您可以猜到,当您单击 SO 问题或答案中的编辑链接时,相同的问题或答案以可编辑模式打开,这就是我要找的
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多