我是 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:我还查看了文档。
我们都去过那里。问题出在
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)
两种方法都可以,但我会说坚持使用更简单的方法。快乐编码。