Задать вопрос
@FromProg

Как сделать, чтобы значение само записывалось в бд при создании новой строки?

Как сделать, чтобы значение само записывалось в бд при создании новой строки?

У меня есть форма, где пользователь может ввести значения для 4 полей из 5. Пятое поле представляет собой поле даты и времени. Как я могу сделать так, чтобы дата и время автоматически записывались в эту строку бд при добавлении этой строки?

html:
<form method='post' id='adding_text'>
		{% csrf_token %}
		{{ form.author }}<br>
		{{ form.title }}<br>
		{{ form.topic }}<br>
		{{ form.text }}<br>
		{{ form.date_and_time }}<br>
		<button type='submit' id='submit_button_in_adding_text_form'>Добавить</button>
	</form>


forms.py:
from .models import Texts
from django import forms
from django.forms import ModelForm

class TextsForm(ModelForm):
	class Meta:
		model = Texts
		fields = ['author', 'title', 'topic', 'text', 'date_and_time']

		widgets = {
			'author': forms.TextInput(attrs={
				'class': 'input_author input_in_adding_text',
				'placeholder': 'Текст',
				'readonly': 'readonly'
			}),
			'title': forms.TextInput(attrs={
				'class': 'input_title input_in_adding_text',
				'placeholder': 'Название текста'
			}),
			'topic': forms.TextInput(attrs={
				'class': 'input_topic input_in_adding_text',
				'placeholder': 'Тема текста',
			}),
			'text': forms.Textarea(attrs={
				'class': 'input_text input_in_adding_text',
				'placeholder': 'Текст'
			}),
			'date_and_time': forms.DateTimeInput(attrs={
				'class': 'input_date_and_time input_in_adding_text',
				'placeholder': 'Дата и время',
				'readonly': 'readonly'
			}),
		}


models.py:
class Texts(models.Model):
	author = models.CharField('Автор', max_length=50, default='Аноним')
	title = models.CharField('Название', max_length=100)
	topic = models.CharField('Тема', max_length=100, default='')
	text = models.TextField('Текст')
	date_and_time = models.DateTimeField('Дата и время')

	def __str__(self):
		return self.title

	class Meta:
		verbose_name = 'Текст'
		verbose_name_plural = 'Тексты'


views.py:
def adding_text(request):
    error = ''
    if request.method == 'POST':
        form = TextsForm(request.POST)
        if form.is_valid():
            form.save()
        else:
            error = 'Форма была заполнена неверно, повторите ввод'
            return redirect('texts')
    form = TextsForm()

    data = {
        'form': form
    }

    return render(request, 'adding_text.html', data)
  • Вопрос задан
  • 166 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@FromProg Автор вопроса
Решил, при таком варианте всё работает отлично:
date_and_time = models.DateTimeField(default=timezone.now)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@maksam07
Я обычно пользуюсь такими полями:
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)

В твоем случае, нужно только добавить аргумент в модель
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы