簡體   English   中英

Django ModelForm沒有保存數據

[英]Django ModelForm not saving data

我嘗試過以下帖子的解決方案:

從ModelForm保存數據 :沒有用

ModelForm數據沒有保存django沒用

我正在嘗試將ModelForm中的數據保存到模型中。

models.py:

class Testimonials(models.Model):
    name = models.CharField(max_length=128)
    credentials = models.CharField(max_length=128)
    test = models.CharField(max_length=2000)
    id = models.AutoField(primary_key=True)
    NO = 'NO'
    YES = 'YES'
    APPROVAL = ((NO, 'no'), (YES, 'yes'))
    verified = models.CharField(choices=APPROVAL, default=NO, max_length=3) #Field for making sure only verified testimonials are displayed

    def __unicode__(self):
        return self.id

forms.py:

class TestimonialForm(forms.ModelForm):
    name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter your name'}), required=True)
    credentials = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter your designation'}), required=True)
    test = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control test-form-area', 'placeholder': 'Testimonial', 'rows': '5'}), required=True)
    verified = forms.ChoiceField(widget=forms.HiddenInput())

    class Meta:
        model = Testimonials  

views.py

def add_testimonial(request):
    context = RequestContext(request)
    if request.method == 'POST':
        form = TestimonialForm(request.POST)

        if form.is_valid():
            form.save(commit=True)
            return HttpResponseRedirect('/testimonials/thanks/')
        else:
            print form.errors

    else:
        form = TestimonialForm()

    return render_to_response('templates/add_testimonial.html', {'form': form}, context)

模板:

<form id="testimonial_form" method="POST" action="/testimonials/thanks/">
    {% csrf_token %}
    {% for hidden in form.hidden_fields %}
        {{ hidden }}
    {% endfor %}
    {% for field in form.visible_fields %}
        {{ field.help_text}}
        {{ field }}
    {% endfor %}
    <input type="submit" name="submit" value="Add testimonial" class="btn btn-info test-button"/>
</form>

編輯:

urls.py

url(r'^testimonials/all/', views.testimonials, name='testimonial'),
url(r'^testimonials/thanks/', views.testimonials_thanks, name='testimonial_thanks'),
url(r'^add_testimonial', views.add_testimonial, name='add_testimonial'),

但是,在重定向時,它不會將表單保存到我正在從PHPMyAdmin(使用MySQLdb)和Django Admin面板檢查的模型中。 知道為什么嗎?

您正在發帖/testimonials/thanks/應該更改為您的add_testimonial路線,讓您的視圖處理POST。 因此,解決方案是更改模板表單標記中的action值。

如果您可以發布urls.py中的相關代碼,我可以提供一個更具體的答案,說明action屬性的值應該是什么。

更新

當有效表單被POST時,重定向將在您的視圖中發生。 將模板的操作屬性值更改為:

<form id="testimonial_form" method="POST" action="{% url 'add_testimonial' %}">

在你看來:

if form.is_valid():
    form.save()
    return HttpResponseRedirect(reverse('testimonial_thanks'))

並確保在視圖中包含以下導入:

from django.core.urlresolvers import reverse

更新2

在模板中顯示表單錯誤:

<form id="testimonial_form" method="POST" action="{% url 'add_testimonial' %}">
    {% csrf_token %}
    {% if form.non_field_errors %}
        <div class="form-group text-error">
            {{ form.non_field_errors }}
        </div>
    {% endif %}

    {% for hidden in form.hidden_fields %}
        {{ hidden }}
    {% endfor %}
    {% for field in form.visible_fields %}
        {{ field.help_text}}
        {{ field }}
        {% if field.errors %}
            <span>{{ field.errors|striptags }}</span>
        {% endif %}
    {% endfor %}
    <input type="submit" name="submit" value="Add testimonial" class="btn btn-info test-button"/>
</form>

更新3

現在您可以看到表單錯誤,您需要將默認值提供給隱藏字段,如果用戶沒有選擇(它隱藏了!),則無需將其設置為ChoiceField。 因此,將verified表單字段更改為:

verified = forms.CharField(widget=forms.HiddenInput(), initial='no')

此外,驗證視圖中的值是一個好主意,因為即使該字段被隱藏,一個有進取心,邪惡的用戶仍然可以POST其他值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM