Что делать, если данные не сохраняются в Django?
Я новичок в Django. И столкнулся с проблемой сохранения данных из формы в базу данных. Я писал код на PyCharm. Основная проблема в том, что данные не сохраняются в базу данных. Нет ни ошибок, ни предупреждений, НИЧЕГО. Все работает, кроме сохранения. Буду очень благодарен за помощь!
Вот код:
views.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'
}),
}
urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.news_home, name='news'),
path('сreate', views.create, name='create'),
]
Я перепробовал кучу видео на 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)
Оба метода будут работать, но я бы посоветовал придерживаться более простого. Счастливого кодирования.