Django中没有保存数据怎么办?

问题描述 投票:0回答:1

我是 Django 新手。我面临着将数据从表单保存到数据库的问题。我正在 PyCharm 中编写代码。主要问题是数据没有保存在数据库中。没有错误,没有警告,什么都没有。除了保存之外一切正常。我将非常感谢您的帮助! 这是代码:
视图.py:

from django.shortcuts import render, redirect
from .models import Articles
from .forms import ArticlesForm


def news_home(request):
    news = Articles.objects.order_by('title')
    return render(request, 'news/news_home.html', {'news': news})


def create(request):
    error = ''
    if request.method == 'POST':
        form = ArticlesForm(request.POST)
        if form.is_valid():
            article = form.save()
            return redirect('news_home')
        else:
            error = 'Unfortunately, the form was not filled out correctly.'

    form = ArticlesForm()

    data = {
        'form': form,
        'error': error
    }
    return render(request, 'news/create.html', data)

models.py:

from django.db import models


class Articles(models.Model):
    title = models.CharField('name', max_length=50)
    anons = models.CharField('anons', max_length=250)
    full_text = models.TextField('article')
    date = models.DateTimeField('Date of publication')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'news'
        verbose_name_plural = 'news'

forms.py:

from .models import Articles
from django.forms import ModelForm, TextInput, DateTimeInput, Textarea


class ArticlesForm(ModelForm):
    class Meta:
        model = Articles
        fields = ['title', 'anons', 'full_text', 'date']

        widgets = {
            "title": TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'the name of the record'
            }),
            "anons": TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Announcement of the recording'
            }),
            "full_text": Textarea(attrs={
                'class': 'form-control',
                'placeholder': 'write about something'
            }),
            "date": DateTimeInput(attrs={
                'class': 'form-control',
                'placeholder': 'Date of publication'
            }),
        }

创建.py:

{% extends 'main/layout.html' %}

{% block title%}Create article{% endblock %}

{% block content%}
    <div class="features">
        <h1>Create article</h1>
        <form action="{% url 'create' %}" method="POST" class="post-form">
            {% csrf_token %}
            {{ form.title }}<br>
            {{ form.anons }}<br>
            {{ form.full_text }}<br>
            {{ form.date }}<br>
            <span>{{ error }}</span>
            <button class="btn btn-success" type="submit">Create article</button>
        </form>
    </div>
{% endblock %}

我尝试了很多YouTube视频和互联网上的文章,但都是徒劳。 UPD:我还查看了文档。

python django database forms sqlite
1个回答
0
投票

我们都去过那里。问题出在

def create()
文件中的
views.py
查看功能。在这种情况下,
article = form.save()
行是不必要的。但是,如果您愿意,您可以使用它。这里有 2 种不同的实现。

更简单的方法

def create(request):
if request.method == 'POST':
    form = ArticlesForm(request.POST)
    if form.is_valid():
        article = form.save(commit==False)  # Save the article

        return redirect('news_home')  # Redirect after POST
    else:
        error = 'Unfortunately, the form was not filled out correctly.'
else:
    form = ArticlesForm()  # Initialize a blank form for GET requests
    error = ''  # No error initially on GET request

context = {
    'form': form,
    'error': error
}
return render(request, 'news/create.html', context)

你的方法

def create(request):
if request.method == 'POST':
    form = ArticlesForm(request.POST)
    if form.is_valid():
        article = form.save(commit==False)  # here we assign form to article
        # perform some task here like setting author to user: article.author = request.user
        article.save()
        return redirect('news_home')  # Redirect after POST
    else:
        error = 'Unfortunately, the form was not filled out correctly.'
else:
    form = ArticlesForm()  # Initialize a blank form for GET requests
    error = ''  # No error initially on GET request

context = {
    'form': form,
    'error': error
}
return render(request, 'news/create.html', context)

两种方法都可以,但我会说坚持使用更简单的方法。快乐编码。

© www.soinside.com 2019 - 2024. All rights reserved.