【问题标题】:Can't get form data from site to save in database Django MySQL无法从站点获取表单数据以保存在数据库 Django MySQL 中
【发布时间】:2021-09-06 11:42:18
【问题描述】:

我正在将 Django 与 MySQL 数据库一起使用。一切正常,但我输入的数据不会保存到数据库中。

这是我的 HTML:

 <form class="space-y-8 divide-y divide-gray-200 m-2">
{% csrf_token %}
    <div class="space-y-8 divide-y divide-gray-200">
        <div class="pt-8">
            <div>
                <h3 class="text-lg leading-6 font-medium text-gray-900">
                    Project Information
                </h3>

            </div>
            <div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6">
                <div class="sm:col-span-3">
                    <label for="project-name" class="block text-sm font-medium text-gray-700">
                        Project Name
                    </label>
                    <div class="mt-1">
                        <input type="text" name="project-name" id="project-name"
                            class="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 rounded-md">
                    </div>
                </div>

                <div class="sm:col-span-3">
                    <label for="project-location" class="block text-sm font-medium text-gray-700">
                        Project Location
                    </label>
                    <div class="mt-1">
                        <input type="text" name="project-location" id="project-location"
                            class="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 rounded-md">
                    </div>
                </div>
            </div>
            <div class="mt-6 grid grid-cols-1 gap-y-6 gap-x-4 sm:grid-cols-6">
                <div class="sm:col-span-3">
                    <label for="project-operator" class="block text-sm font-medium text-gray-700">
                        Operator
                    </label>
                    <div class="mt-1">
                        <input type="text" name="project-operator" id="project-operator"
                            class="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 rounded-md">
                    </div>
                </div>

                <div class="sm:col-span-3">
                    <label for="project-start-date" class="block text-sm font-medium text-gray-700">
                        Start Date
                    </label>
                    <div class="mt-1">
                        <input type="text" name="project-start-date" id="project-start-date"
                            class="shadow-sm focus:ring-gray-500 focus:border-gray-500 block w-full sm:text-sm border-gray-300 rounded-md">
                    </div>
                </div>
            </div>
        </div>
        <div class="pt-5">
            <div class="flex justify-end">
                <button type="submit"
                    class="ml-3 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white bg-gray-600 hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500">
                    Save
                </button>
            </div>
        </div>
    </div>
</form>

这是我的观点.py

def project(request):
    if request.method == 'POST':
        form = ProjectForm(request.POST or None)

        if form.is_valid():
            form.save()
            all_items = Project.objects.all
            return render(request, 'project.html', {'all_items': all_items})

    all_items = Project.objects.all
    return render(request, 'project.html', {'all_items': all_items})

这是我的forms.py:

class ProjectForm(forms.ModelForm):
    class Meta:
        model = Project
        fields = ['project_name', 'project_location',
                  'operator', 'date_started']

这是我的models.py

class Project(models.Model):
    project_name = models.CharField(max_length=30)
    project_location = models.CharField(max_length=30)
    operator = models.CharField(max_length=30)
    date_started = models.DateField()

我没有收到任何错误,但我保存的数据没有保存在数据库中。谁能看到我需要解决的问题?

【问题讨论】:

  • 您的表单在 html 文件中的什么位置?
  • 如果表单无效怎么办?
  • 如果表单无效,则不会发生任何事情。
  • 如果您使用的是 django 表单,那么您应该在模板中使用它
  • @Prakhar 我不确定你的意思。你能解释一下吗?

标签: python mysql django


【解决方案1】:

在您的view 中,它会将您引导至html 页面:

def project(request):
    if request.method == "POST":
      form = ProjectForm(request.POST)
      if form.is_valid():
         form.save()
      else:
         print("Invalid input from user") # for debugging only, handle according to your need

    form = ProjectForm()
    all_items = Project.objects.all()
    return render(request, 'project.html', {'form': form, 'all_items':all_items})

在你的html

<form action="{% url 'url_name_for_your_project_view' %}" method="POST">

{% csrf_token %}

{{ form }}

<input type="submit" value="submit">
</form>

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2015-10-05
    • 2017-06-30
    相关资源
    最近更新 更多