Django Forms:无法从ModelForm

时间:2017-10-22 16:34:14

标签: django django-models django-forms

我正在创建一个工作板网站。现在我可以成功注册一个雇主但是当我尝试以雇主身份登录时创建一个职位列表时,表单中的数据不会保存到数据库中。我有以下models.py:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.http import HttpResponse


# Create your models here.
class Employer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)


    def __str__(self):
        return self.user.first_name


@receiver(post_save, sender=User)
def create_employer(sender, instance, created, **kwargs):
    if created:
        Employer.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_employer(sender, instance, **kwargs):
    instance.employer.save()

class Job(models.Model):
    poster = models.ForeignKey(Employer, on_delete=models.CASCADE)
    job_title = models.CharField(max_length=50)
    establishment_name = models.CharField(max_length = 50)
    details = models.TextField(max_length = 2000)
    salary = models.CharField(max_length = 20)
    address = models.CharField(max_length = 50)
    state = models.CharField(max_length = 20)
    zip_code = models.CharField(max_length = 10)


    def __str__(self):
        return self.job_title + " - " + self.establishment_name \
               + ", " + self.poster.user.first_name + " " +self.poster.user.last_name

用户可以正常注册为雇主,但我在将Job保存到数据库时遇到问题。一旦用户注册/登录为雇主,他们将被重定向到employer_home.html,雇主可以在那里发布工作:

{% extends 'core/base.html' %}


{% block body %}
    <h1>Post a Job</h1>

    <form>
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Post</button>


    </form>
{% endblock %}

这是我的forms.py:

from django.forms import ModelForm
from .models import Job
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class EmployerSignupForm(UserCreationForm):
    class Meta:
        model = User
        fields =  ('first_name',
                   'last_name',
                   'email',
                   'username',
                   'password1',
                   'password2',)

class JobPostForm(ModelForm):
    class Meta:
        model = Job
        fields= ('job_title',
               'establishment_name',
               'salary',
               'address',
               'state',
               'zip_code',
               )

这是我的employer_view(处理Job表单的视图):

def employer_home(request):
    if request.method == 'POST':
        form = JobPostForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse('Working!')
    else:
        form = JobPostForm()
    return render(request, 'core/employer_home.html', {'form': form})

employer_home.html显示一个没有问题的表单,但是当提交表单时,没有任何数据保存到数据库,并且return HttpResponse('Working!')永远不会被执行,它只是重新加载空表单。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在html模板中尝试<form method="post">。 默认情况下,该方法是 get

答案 1 :(得分:0)

添加方法=&#34; POST&#34;在你的形式。在您看来这样做:

def employer_home(request):
if request.method == 'POST':
    form = JobPostForm(request.POST)
    if form.is_valid():
        job_object = form.save(commit=False)
        job_object.poster = poster_object
        job_object.save()
        return HttpResponse('Working!')
else:
    form = JobPostForm()
return render(request, 'core/employer_home.html', {'form': form})

此处显示了一个很好的示例:example