Здравствуйте!
Изучаю django, делаю сайт-одностраничник. Сайт состоит из главной страницы (содержит текст и заголовок) и админки, где через форму меняется информация на главной.
БД (sqllite3) состоит из одной таблицы с полями id, text, headline. Я не хочу создавать много строк, поэтому всегда переписываю запись с pk=1. Даже не знаю, правильно ли это.
В моделе поле "text" - необязательно и может быть пустым.
Подскажите, какой код мне надо прописать во views (или в моделях), чтобы при сохранении формы в БД, пустое значение text не перезаписывало предыдущее значение в БД? Я видел в доках атрибут update_fields, но он работает только в наследниках Models, а не ModelsForm.
Буду рад помощи, и вообще комментариям по проекту. Спасибо!
models.py
class Info(models.Model):
headline = models.TextField()
text = models.TextField(blank=True)
def get_headline(self):
return self.headline
zagolovok = property(get_headline)
def __str__(self):
return self.headline
form.py
class InfoForm(ModelForm):
class Meta:
model = Info
fields = ['headline', 'text',]
widgets = {
'headline': TextInput(attrs={'size' : 100}),
'text': Textarea(attrs={'cols': 80, 'rows': 20}),
}
UPDATE
get_headline нужен чтобы получить row-level значение.
view.py
text = Info.objects.get(pk=1)
def admin(request):
if request.method == 'POST':
form = InfoForm(request.POST, instance=text)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
form = InfoForm()
return render(request, 'admin.html', {
'form': form,
'text': text,
})
admin.html
<form action="change-admin" method="post">
{% csrf_token %}
<h2>Текущий заголовок</h2>
<p>{{ text.headline }}</p>
{{ form.headline }}
<h2>Текущий текст</h2>
<p>{{ text.text }}</p>
{{ form.text }}
<br /><input type="submit" value="Изменить">
</form>