Django表单用户表单未登顶

Posted

技术标签:

【中文标题】Django表单用户表单未登顶【英文标题】:Django forms User form not summited 【发布时间】:2021-06-30 07:10:49 【问题描述】:

我的代码需要帮助。我已经通读了好几遍代码,没有发现任何问题。 用户应该提交工作申请并将用户重定向到仪表板,但它没有提交工作申请,也没有将用户引导到仪表板。 这是我的代码: mode.py

from django.db import models
from django.contrib.auth.models import User


class Job(models.Model):
    title = models.CharField(max_length=255)
    short_description = models.TextField()
    long_description = models.TextField(blank=True, null=True)


    created_by = models.ForeignKey(User, related_name='jobs', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    changed_at = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.title

class Application(models.Model):
    job = models.ForeignKey(Job, related_name='applications', on_delete=models.CASCADE)
    content = models.TextField()
    experience = models.TextField()

    created_by = models.ForeignKey(User, related_name='applications', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

Views.py

from django.shortcuts import render, redirect

从 django.contrib.auth.decorators 导入 login_required

从 .forms 导入 AddJobForm, ApplicationForm 从 .models 导入工作

def job_detail(request, job_id): 工作 = Job.objects.get(pk=job_id) return render(request, 'jobs/job_detail.html', 'job': job)

@login_required def add_job(请求): 如果 request.method == 'POST': form = AddJobForm(request.POST)

    if form.is_valid():
        job = form.save(commit=False)
        job.created_by = request.user
        job.save()

        return redirect('dashboard')

else:
    form = AddJobForm()

return render(request, 'jobs/add_job.html', 'form': form)

@login_required def apply_for_job(请求,job_id): 工作 = Job.objects.get(pk=job_id)

if request.method == 'POST':
    form = ApplicationForm(request.POST)

    if form.is_valid():
        application = form.save(commit=False)
        application.job = job
        application.created_by = request.user
        application.save()

        #create_notification(request, job.created_by, 'application', extra_id=application.id)

        return redirect('dashboard')
else:
    form = ApplicationForm()

return render(request, 'jobs/apply_for_job.html', 'form': form, 'job': job)

forms.py

from django import forms

从 .models 导入作业、应用程序

类 AddJobForm(forms.ModelForm): 元类: 型号 = 工作 字段 = ['title','short_description','long_description']

类 ApplicationForm(forms.ModelForm): 元类: 型号 = 应用 fields = ['内容', '经验']

apply_for_job.html

% extends 'core/base.html' %

% 块内容 % 申请工作 - job.title

<form method="post" action=".">
    % csrf_token %

    % if form.errors %
        % for error in form.errors %
            <div class="notification is-danger">
                 error 
            </div>
        % endfor %
    % endif %

    <div class="field">
        <label>Content</label>

        <div class="control">
            <textarea class="textarea" name="content" id="id_content"></textarea>
        </div>
    </div>

    <div class="field">
        <label>Experience</label>

        <div class="control">
            <textarea class="textarea" name="experience" id="id_experience"></textarea>
        </div>
    </div>

    <div class="field">
        <div class="control">
            <button class="button is-success">Submit</button>
        </div>
    </div>
</form>

% 端块 %

我的代码有什么问题?

【问题讨论】:

很难准确判断问题出在哪里,但您的申请表肯定没有通过验证。如果您随时对模型进行了任何更改,请从您的数据库中确认所有更改都已生效。否则,您可能需要删除所有迁移文件、删除数据库、进行迁移、迁移并重新创建超级用户,然后重试。 您还应该在验证之前将申请表中的数据打印到控制台,这样您就可以查看是否有任何表单字段发送了无效数据。 您是否尝试打印出表单错误? 【参考方案1】:

这一行的错误

<form method="post" action=".">

只需删除该点,它应该可以工作,

<form method="post" action="">

【讨论】:

以上是关于Django表单用户表单未登顶的主要内容,如果未能解决你的问题,请参考以下文章

Django allauth 自定义登录表单未呈现自定义用户模型中的所有字段

Django - 当用户提交表单时,会创建表,但表之间的连接不是

django - 动态添加 django 表单字段并保留用户输入

标头中的 Django 登录表单

我的 django 表单如何获取当前用户名和电子邮件并将它们提交到另一个数据库表中?

Django 动态表单,带有 HTML 数组的表单集