私は求人掲示板サイトを作成しています。今私は正常に雇用者を登録することができますが、雇用者としてログインしている間に求人リストを作成しようとすると、フォームのデータはデータベースに保存されません。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は問題なくフォームが表示されますが、フォームが送信されたときにデータがいずれもデータベースとに保存されていませんは決して実行されません。単に空のフォームをリロードします。誰もがこれを修正する方法を知っていますか?
ありがとうございましたが、poster_objectはどこから来ましたか? –
これはエラーを引き起こしている問題だと思います。あなたの "仕事"モデルでは、フィールド "ポスター"はFキーです。だから保存時には、null = Trueまたはblank = Trueに設定されていないので、フォームはポスターオブジェクトを予期します。したがって、ビューでは、対応するポスターオブジェクトを取得するためのクエリがありません。モデルはform.save(commit- = False)を呼び出すと保存されません。オブジェクトは、保存が呼び出されたときにのみ保存されます。 – rajkris
私はposter_objectの部分を理解しました。あなたの答えがうまくいきました!ありがとう! –