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

时间:2021-05-17 07:23:25

标签: python django django-forms

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

这是我的 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)

models.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

links.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>

views.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})

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

Django 允许使用 ModelForm 类将表单映射到模型。

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()
...

相关问题