@RussianGuf

Как не сохранять пустые значения в форме django?

Добрый день, на сайте сделал функцию добавления телеграм адреса. Само добавление не обязательное по этому случилась проблема, когда форма пустая а пользователь жмет "сохранить настройки" то сохраняется пустая строчка в бд которая стирая прошлую. Вопрос - Как отключить возможность сохранять пустую строку если в бд уже есть строка, но не включая поле в обязательные для заполнения или как в строку добавить html тег value с уже сохранённой из бд строчкой в поле ввода.

views
from django.shortcuts import render
from .forms import Telegramform
from .models import Profile
# Create your views here.

def settingsprofiles(request):
    error = ''
    if request.method == "POST":
        form = Telegramform(request.POST)
        if form.is_valid():
            profile = form.save(commit=False)
            profile.user = request.user
            profile.id = request.user.id
            profile.email = request.user.email
            w = Profile.objects.get(id=profile.id)
            profile.btcadress = w.btcadress
            form.save()
        else:
            error = "Ошибка, телеграм не был изменен"
    form = Telegramform()
    data = {
        'form': form,
        'error': error,
    }
    return render(request, 'profiles/settings.html', data)


html
<div class="bg-white p-5 rounded shadow ml-auto mr-auto mt-5 ">

            <div class="text-center">
                <h1>Ваш профиль</h1>
            </div>
            <hr>
            <div class="text-center">
                <h1>Настройки профиля</h1>
            </div>
        <form method="post">
           {% csrf_token %}
            <label class="fw-normal mt-1">Телеграм (необязательно):</label>
            {{ form.telegram }}
                 <span>{{ error }}</span>
            <button class="btn btn-lg btn-success mt-3" type="submit"><i class="fas fa-save"></i> Сохранить</button>
       </form>
    </div>

forms
from .models import Profile
from django.forms import ModelForm, TextInput

class Telegramform(ModelForm):
    class Meta:
        model = Profile
        fields = ['telegram']
        widgets = {
            'telegram': TextInput(attrs={
                'class': 'form-control',
                'placeholder': '@Телеграм',
            }),
        }

models
class Profile(models.Model):
    user = models.OneToOneField(User, verbose_name='Пользователь', on_delete=models.CASCADE)
    telegram = models.CharField("Телеграм", blank=True, null=True, max_length=50)
    email = models.CharField("Почта", blank=True, null=True, max_length=50)
    btcadress = models.CharField("Биткоин адресс", blank=True, null=True, max_length=50)
  • Вопрос задан
  • 58 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bacon
Потому что для редактирования использую параметр instance у формы, а не городят свои велосипеды.
ЗЫ зачем держать почту в двух местах profile.email = request.user.email?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
01 мар. 2021, в 17:05
25000 руб./за проект
01 мар. 2021, в 16:46
150000 руб./за проект
01 мар. 2021, в 16:33
21000 руб./за проект