基于Django类的视图表单不会将数据保存到数据库

时间:2013-12-27 03:23:29

标签: python database django forms

我无法将表单数据提交到我的sqlite3数据库。我没有看到任何错误。我可以通过管理员提交数据,但不能通过我自己的控制器使用表单。我尝试了很多差异。组合仍然没有成功。我想使用基于类的视图。一切正常,表单只是不会将数据保存到数据库。没有错误。

url:url(r'^create/$', CreateRequest.as_view())

forms.py:

class CreateForm(ModelForm):
    date_due = forms.DateTimeField(widget=widgets.AdminSplitDateTime)
    class Meta:
        model = Request
        fields = ['region', 'user_assigned', 'user_requester',  'description']

views.py:

class CreateRequest(LoginRequiredMixin, CreateView):
    model = Request
    fields = ['region', 'user_assigned', 'user_requester', 'date_due', 'description']
    template_name = "requests_app/createRequest.html"
    form_class = CreateForm
    success_url = '/'

    def form_valid(self, form):
        objects = form.save()
        return super(CreateRequest, self).form_valid(form)

models.py:

class Request(models.Model):
    region = models.ForeignKey(Region)
    completed = models.BooleanField(default=False)
    user_assigned = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, related_name='user_assigned')
    user_requester = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='user_requester')
    date_due = models.DateTimeField()
    date_completed = models.DateTimeField(null=True, blank=True)
    description = models.CharField(max_length=500)

    objects = models.Manager()
    open_requests = OpenRequests()
    completed_requests = CompletedRequests()

    def mark_completed(self):
        if not self.completed:
            self.completed = True
            self.date_completed = datetime.datetime.now()

的index.html:

<h1>hi</h1>
<form action="/create/" method="post">
    {% csrf_token %}
    {{ form.non_field_errors }}
    <div class="fieldWrapper">
        {{ form.region.errors }}
        <label for="id_region">Region</label>
        {{ form.region }}
    </div>
    <div class="fieldWrapper">
        {{ form.user_assigned.errors }}
        <label for="id_user_assigned">User Assigned</label>
        {{ form.user_assigned }}
    </div>
    <div class="fieldWrapper">
        {{ form.user_requester.errors }}
        <label for="id_user_requester">user_requester: </label>
        {{ form.user_requester }}
    </div>
    <div class="fieldWrapper">
        <p> {{ form.date_due.errors.as_text }} </p>
        <label for="id_date_due">Due Date</label>
        {{ form.date_due }}
    </div>
     <div class="fieldWrapper">
        {{ form.description.errors }}
        <label for="id_description">Descr.</label>
        {{ form.description }}
    </div>

    <p><input type="submit" value="Submit Request" /></p>
    {% if form.non_field_errors %}
        {% for err in form%}
        <div class="fieldWrapper">
          <p class="form-error">{{ err }}</p>
          <p class="form-error">{{ err.label_tag }} {{ field }}</p>
      </div>
        {% endfor %}
    {% endif %}
</form>

{% endblock %}

1 个答案:

答案 0 :(得分:1)

在views.py中

你不需要这一行:objects = form.save() 它可以是

class ContaktCreateView(CreateView):

model = Contakt
form_class = ContaktForm
template_name = "www/www_contakt.html"
success_url = '/thanks/'

def form_valid(self, form):
    return super(ContaktCreateView, self).form_valid(form) 

此外,我没有在表单操作中使用操作=“/ create /”method =“post”

您是通过urls.py中的行调用此html表单:

url(r'^create/$', CreateRequest.as_view())

正在使用您正在使用index.html表单文件的CreateRequest视图。