繁体   English   中英

Django 表单数据未保存到 SQLite 数据库中

[英]Django form data not saving into SQLite database

我正在制作一个 Django 项目,我想在我的表单中提交一个链接名称和一个链接,并使其出现在links.html但是当我按下提交时,它会在控制台上打印出一个发布方法已经发生但是当我检查数据库中的数据尚未保存到其中。 万一这是我的模型的问题,我通过 shell 制作了一个,但它似乎没问题。

这是我的 forms.py:

from django import forms
class LinkForm(forms.Form):
    link_text = forms.CharField(label="Link text", max_length=150)
    link = forms.URLField(max_length=100000)

模型.py:

from django.db import models

# Create your models here.


class Topic(models.Model):
    topic_text = models.CharField(max_length=40)

    def __str__(self):
        return self.topic_text


class Link(models.Model):
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    link_text = models.CharField(max_length=150)
    link = models.URLField(max_length=100000)

    def __str__(self):
        return self.link_text

链接。html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Links</title>
  </head>
  <body>
    {% if links %} {% for link in links %}
    <a href="{{link.link}}">{{link.link_text}}</a>
    <br />
    {% endfor %} {% else %}
    <h1>This topic has no links</h1>
    {% endif %}
    <a href="/topics/{{ topic.id }}/newLink">Add a new link</a>
  </body>
</html>

newLink.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Create New Link</title>
  </head>
  <body>
    <h1>Create a new link</h1>
    <form action="/topics/{{ topic.id }}/" method="post">
      {% csrf_token %}
      <label for="link_text">Link name: </label>
      <input id="link_text" type="text" name-"link_text">
      <label for="link">Link: </label>
      <input id="link" type="url" name="link" />
      <input type="submit" />
    </form>
  </body>
</html>

视图.py:

from django.template import loader
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from .models import Topic, Link
from .forms import TopicForm, LinkForm

# Create your views here.

def newLink(request, id):
    topic = get_object_or_404(Topic, pk=id)
    links = topic.link_set.all()

    return render(request, 'findmylink/newLink.html', {'topic': topic})

def links(request, id):
    topic = get_object_or_404(Topic, pk=id)

    if request.method == 'POST':
        form = LinkForm(request.POST)
        if form.is_valid():
            l_text = request.POST['link_text']
            l_link = request.POST['link']

            l = topic.link_set.create(link_text=l_text, link=l_link)

            HttpResponseRedirect('/topics/' + id)

        else:
            form = LinkForm()

    links = topic.link_set.all()

    return render(request, 'findmylink/links.html', {'topic': topic, 'links': links})

我在这里做错了什么?

Django 允许 map 使用 ModelForm ZA2F2ED4F8EBC2CBB14C21A29DC40 将表格转换为model

https://docs.djangoproject.com/en/3.2/topics/forms/modelforms/

基本上你的表格应该是这样的:

from django.forms import ModelForm
from path.to.models.module import Link

class LinkForm(ModelForm):
    class Meta:
        model = Link
        fields = ['link_text', 'link']

而你的观点:

from .forms import LinkForm

def links(request, id):
...
    if request.method == 'POST':
        form = LinkForm(request.POST)
        if form.is_valid():
            form.save()
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM