Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试使用ForeignKey链接两个模型,但出现错误“IntegrityError NOT NULL”_Python_Django - Fatal编程技术网

Python 尝试使用ForeignKey链接两个模型,但出现错误“IntegrityError NOT NULL”

Python 尝试使用ForeignKey链接两个模型,但出现错误“IntegrityError NOT NULL”,python,django,Python,Django,我有一个模型,其中一个用户发布一个职位空缺,然后其他用户可以提交申请。提交应用程序模型称为“CandidateSubmission”&从不同的应用程序/模型“JobPosts”中提取“title” 我可以通过管理页面添加提交应用程序,但当尝试使用表单添加提交应用程序时,我得到IntegrityError NOT NULL约束失败:候选者\u CandidateSubmission.title\u id 我相信我的Views.py中遗漏了一些东西,它本质上是说使用职位空缺的标题作为标题字段 我尝试

我有一个模型,其中一个用户发布一个职位空缺,然后其他用户可以提交申请。提交应用程序模型称为“CandidateSubmission”&从不同的应用程序/模型“JobPosts”中提取“title”

我可以通过管理页面添加提交应用程序,但当尝试使用表单添加提交应用程序时,我得到IntegrityError NOT NULL约束失败:候选者\u CandidateSubmission.title\u id

我相信我的Views.py中遗漏了一些东西,它本质上是说使用职位空缺的标题作为标题字段

我尝试添加null=True,blank=False,但这会停止错误,但标题不会保存到数据库中

任何关于我做错了什么的建议都很好。多谢各位

models.py

views.py

forms.py


如果你有当前的标题,那么你的slug可以存储它,这样你就可以像那样使用它

def submit_candidates_view(request, slug):
    context = {}
    user = request.user
    if not user.is_authenticated:
        return redirect('must_authenticate')

    form = CreateCandidatePostForm(post_slug=slug, request.POST or None, request.FILES or None)
    if form.is_valid():
        obj = form.save(commit=False)
        author = Account.objects.filter(email=user.email).first()
        obj.author = author
        
        obj.save()
        form = CreateCandidatePostForm()

    context['form'] = form

    accounts = CandidatesSubmission.objects.all()
    context['accounts'] = accounts

    return render(request, 'candidates/submit_candidates.html', context)
在your forms.py中,我们替换_init__;方法来接收标题的slug

class CreateCandidatePostForm(forms.ModelForm):
    class Meta:
        model = CandidatesSubmission
        fields = ['Fee', 'CandidateFirstName', 'CandidateSecondName']

    def __init__(self, *args, **kwargs):
        self.post_slug = kwargs.pop("post_slug", None)
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        submission_post = self.instance
        submission_post.title = JobsPost.objects.get(slug=self.post_slug)
        if commit:
            submission_post.save()
        return submission_post

您描述了要保存在表单['Fee'、'CandidateFirstName'、'CandidateSecondName']中的字段,所以不将标题保存到数据库。如果要填充某个标题,则需要更改保存表单方法中的标题,不允许用户选择it@AndreyMaslov因此,“标题”字段来自另一个模型-我将如何显示标题以及“费用”“CandidateFirstName”和“CandidateSecondName”?您可以将其编辑为任何其他字段,用户将从另一个模型中选择所需的标题。如果您不希望用户选择它,并且希望手动填充它,那么您需要更新您的保存表单方法,从其他模型中读取所需的标题,并将其放在此处,我想我理解。我添加了title=JobsPost.objects.filter.last,它解决了空值问题。很明显,它是最后一个,但我希望它是现在的冠军。有什么建议吗?谢谢你迄今为止的帮助。补充答案。检查它这工作完美!!!非常感谢你的帮助!你不知道我有多困。。。
from django import forms

from candidates.models import CandidatesSubmission

class CreateCandidatePostForm(forms.ModelForm):


    class Meta:
        model = CandidatesSubmission
        fields = ['Fee', 'CandidateFirstName', 'CandidateSecondName']

    def save(self, commit=True):
        submission_post = self.instance
        submission_post.Fee = self.cleaned_data['Fee']
        submission_post.CandidateFirstName = self.cleaned_data['CandidateFirstName']
        submission_post.CandidateSecondName = self.cleaned_data['CandidateSecondName']
        if commit:
            submission_post.save()
        return submission_post
def submit_candidates_view(request, slug):
    context = {}
    user = request.user
    if not user.is_authenticated:
        return redirect('must_authenticate')

    form = CreateCandidatePostForm(post_slug=slug, request.POST or None, request.FILES or None)
    if form.is_valid():
        obj = form.save(commit=False)
        author = Account.objects.filter(email=user.email).first()
        obj.author = author
        
        obj.save()
        form = CreateCandidatePostForm()

    context['form'] = form

    accounts = CandidatesSubmission.objects.all()
    context['accounts'] = accounts

    return render(request, 'candidates/submit_candidates.html', context)
class CreateCandidatePostForm(forms.ModelForm):
    class Meta:
        model = CandidatesSubmission
        fields = ['Fee', 'CandidateFirstName', 'CandidateSecondName']

    def __init__(self, *args, **kwargs):
        self.post_slug = kwargs.pop("post_slug", None)
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        submission_post = self.instance
        submission_post.title = JobsPost.objects.get(slug=self.post_slug)
        if commit:
            submission_post.save()
        return submission_post