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

Есть ли аналог update_fields в ModelForm?

Здравствуйте!

Изучаю 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>
  • Вопрос задан
  • 293 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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