【问题标题】:Django request.POST.get does not save to model fieldDjango request.POST.get 不保存到模型字段
【发布时间】:2018-07-10 02:26:13
【问题描述】:

我正在尝试从 request.POST 字典中保存数据。我想从 request.POST 中获取与前缀相对应的“名称”值。但是,它没有发生,并且没有任何内容保存到 Name 模型中。另外,我没有错误。你能否请教如何解决这个案子?谢谢。

views.py

from django.shortcuts import render
from .forms import modelformset_factory, AssumptionsForm
from .models import Assumptions
from django.core.exceptions import ValidationError
import pdb

model_names = ['A', 'B']

def get_assumptions(request):

    AssumptionFormset = modelformset_factory(
    Assumptions, form=AssumptionsForm, extra=5)

    if request.method == 'POST':



        formsets = [AssumptionFormset(request.POST, prefix=thing) for thing in model_names]

        if all([formset.is_valid() for formset in formsets]):

            for formset in formsets:

                for form in formset:

                    form.save(commit=False)
                    form.Name = request.POST.get('name')
                    form.save()   



    else:

        formsets = [AssumptionFormset(prefix=thing) for thing in model_names]

    return render(request, 'assumptions.html', {'formsets': formsets})

assumptions.html

<div class="form">
<form action="" method="post">
{% for formset in formsets %} 
    {% csrf_token %}
    {{ formset.management_form }}
    {{ formset.non_form_errors.as_ul }} 
    <h1>{{formset.prefix}}</h1>
    <table id="formset" class="form">
    {% for form in formset.forms %}
    {% if forloop.first %}
    <thead><tr>
        {% for field in form.visible_fields %}
        <th>{{ field.label|capfirst }}</th>
        {% endfor %}
    </tr></thead>
    {% endif %}
    <tr class="{% cycle 'row1' 'row2' %}">
        {% for field in form.visible_fields %}
            <td>
            {# Include the hidden fields in the form #}
            {% if forloop.first %}
            {% for hidden in form.hidden_fields %}
            {{ hidden }}
            {% endfor %}
            {% endif %}
            {{ field.errors.as_ul }}
            {{ field }}
            </td>
        {% endfor %}
    </tr>
    {% endfor %}
    </table>
    <input type="hidden" id={{formset.prefix}} name={{formset.prefix}} />
{% endfor %}    
<input type="submit" value="Submit">
</form>
</div>

forms.py

from django import forms
from django.forms import modelformset_factory, ModelForm
from .models import Assumptions

class AssumptionsForm(ModelForm):

    class Meta:
        model = Assumptions
        fields = '__all__'
        exclude = ['Name']

models.py

from django.db import models
from django.forms import ModelForm

class Assumptions(models.Model):

    Worst = models.FloatField(null=True, blank=True, default=None)
    Base = models.FloatField(null=True, blank=True, default=None)
    Best = models.FloatField(null=True, blank=True, default=None)
    Name = models.TextField(null=True, blank=True, default=None)

【问题讨论】:

  • django post 获取值的方法可以使用 form.Name = request.POST['name']
  • 感谢您的洞察力。我也这样做了,但是仍然没有保存到数据库并且没有产生错误。然而,当我调试 request.POST['name'] 包含'B'。想知道为什么它没有保存到数据库中的名称字段。其他建议将不胜感激。谢谢

标签: django post methods modelform


【解决方案1】:

您还应该在 HTML 表单中传递 "name=name""value={{formset.prefix}}"

<input type="hidden" id={{formset.prefix}} name="name" value="{{formset.prefix}}" />

【讨论】:

  • 感谢您的洞察力。我做到了,但是仍然没有保存到数据库并且没有产生错误。然而,当我调试 request.POST.get('name') 包含'B'。想知道为什么它没有保存到数据库中的名称字段。其他建议将不胜感激。谢谢。
  • @Martin 检查您是否有任何其他表单错误。是否保存了其他属性?
  • 除此名称属性外,基本、最差、最佳字段中的所有其他输入值都会被保存。
【解决方案2】:

我想通了。原因是模型的实例没有创建。代码如下:

for form in formset:

    assumption_data = form.save(commit=False)
    assumption_data.Name = request.POST['name']
    assumption_data.save() 

其中假设数据是假设模型的一个实例。感谢大家提供的见解。

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多