Как добавить запись в базу данных Django через форму имея конкретные переменные и 1 инпут?
хочу реализовать добавление записи в базу данных через форму, есть 4 поля в бд, req_id, message, user_status, date, мне надо сделать так чтоб в форме был инпут с добавлением message, а остальные данные заносились без инпутов.
{% block content %}{% for el in tasks %}
<div class="list-group w-auto">
<a href="#" class="list-group-item list-group-item-action d-flex gap-3 py-3" aria-current="true">
{% if el.req_status == "confirm" %}
<span width="32" height="32" class="rounded-circle flex-shrink-0">✅</span>
{% elif el.req_status == "answered" %}
<span width="32" height="32" class="rounded-circle flex-shrink-0">⏳</span>
{% else %}
<span width="32" height="32" class="rounded-circle flex-shrink-0">❌</span>
{% endif %}
<div class="d-flex gap-2 w-100 justify-content-between">
<div>
<h6 class="mb-0">{{ el.user_id }}</h6>
<p class="mb-0 opacity-75">{{ el.inn }}</p>
</div>
<small class="opacity-50 text-nowrap">{{ el.req_id }}</small>
</div>
</a>
</div>
{% for re in messages %}
{% if re.req_id|stringformat:"s" == el.req_id|stringformat:"s" %}
<div class="chat_section">
<p class="mb-0 opacity-75">{{re.message}}</p>
</div>
{% endif %}
{% endfor %}
<form method="post">
{% csrf_token %}
{{ form.message }}
{% form.req_id %}: {{re.req_id}} -ВОТ ЗДЕСЬ НЕ ПОНИМАЮ КАК ПРАВИЛЬНО ПРИСВОИТЬ, И МОЖНО ЛИ ВООБЩЕ()
{% form.user_status %}:{{re.user_status}}
<button type="submit" class="btn btn-success">Отправить</button>
</form>
{% endfor %}
{% endblock %}
Сразу убирайте из формы все кроме одного поля, которое будете вводить. Оставляйте один инпут
в самой вьюшке
def requests(request):
if request.method == "POST":
form = MessageForm(request.POST)
message_from_template = form.cleaned_data['message']
user_status = request.user.status
message = Message(message=message_from_template, user_status=user_status)
message.save()
form = MessageForm()
messages = Messages.objects.all().order_by("req_id")
tasks = Requests.objects.all().order_by("req_id")
context = {"title": "Запросы", "tasks": tasks, "messages": messages, "form": form}
return render(request, "main/requests.html", context)
Написал более понятно вам, создается сущность класса Message()
и в нее добавляется запись. Почему пропущены req_id
и date
? Эти данные должны быть определены в самой модели. Я это вижу так
class Message(models.Model):
req_id = models.AutoField(primary_key=True)
date = models.DateTimeField(auto_now_add=True)
# остальные поля
Документация по автоматическому добавлению даты здесь.
По сути у вас получится, что из темплейта приходит только одно - это сообщение. Все остальное может обрабатываться бекэндом без дополнительных действий