2017-10-22 7 views
0

私は求人掲示板サイトを作成しています。今私は正常に雇用者を登録することができますが、雇用者としてログインしている間に求人リストを作成しようとすると、フォームのデータはデータベースに保存されません。Djangoフォーム:ModelFormから保存するデータに到達できません

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 Sを得るが生じています:私は、次のmodels.pyを持っています。ここで

{% 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_home.htmlにリダイレクトされている雇用者として、ユーザー登録/ログインすると私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は問題なくフォームが表示されますが、フォームが送信されたときにデータがいずれもデータベースとに保存されていませんは決して実行されません。単に空のフォームをリロードします。誰もがこれを修正する方法を知っていますか?

答えて

0

フォームにメソッド= "POST"を追加します。良い例がここに示されている

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

+0

ありがとうございましたが、poster_objectはどこから来ましたか? –

+0

これはエラーを引き起こしている問題だと思います。あなたの "仕事"モデルでは、フィールド "ポスター"はFキーです。だから保存時には、null = Trueまたはblank = Trueに設定されていないので、フォームはポスターオブジェクトを予期します。したがって、ビューでは、対応するポスターオブジェクトを取得するためのクエリがありません。モデルはform.save(commit- = False)を呼び出すと保存されません。オブジェクトは、保存が呼び出されたときにのみ保存されます。 – rajkris

+0

私はposter_objectの部分を理解しました。あなたの答えがうまくいきました!ありがとう! –

0

あなたのhtmlテンプレートで<form method="post">を試してみてください。 デフォルトでは、メソッドはです。を取得します。

+0

私はいつも、私は私のviews.pyに何か問題があったことを確認し、問題が間違ったファイルであると考えているようです。ありがとうございます、私が許可されているとき@aquaman病気あなたの答えを受け入れる。 –

+0

フォームが正しく送信されているので、私は 'poster'の値@aquamanをどのように設定するのか知っていますが、エラーは出ます:" NOT NULL constraint failed:core_job.poster_id "? –

関連する問題