Как изменить значение в SQL Django без ввода в редакторе
В качестве примера у меня есть такие модели:
from django.db import models
class Pos(models.Model):
POS_TAGS = [
('NOUN', 'NOUN'),
('ADJ', 'ADJ'),
('NUM', 'NUM'),
('PRON', 'PRON'),
('ADV', 'ADV'),
('VERB', 'VERB'),
('CNJ', 'CNJ'),
('ADP', 'ADP'),
('PRT', 'PRT'),
('INTJ', 'INTJ'),
('MOD', 'MOD'),
('IMIT', 'IMIT'),
('AUX', 'AUX'),
('PPN', 'PPN'),
('PUNC', 'PUNC'),
('SYM', 'SYM')
]
token = models.CharField(max_length=150)
pos = models.CharField(max_length=150, choices=POS_TAGS, null=True, default='NOUN')
и некоторые данные в модели Pos:
Затем я хочу изменить данные без ввода в редакторе:
вот так:
просто измените значение на главной странице и нажмите ок для сохранения
Вы должны иметь form
внутри html, иначе вы не сможете выполнить действие POST
.
Добавьте это в шаблон:
{% for el in pos %}
<form method="POST" id="pos_form_{{ el.id }}">
{% csrf_token %}
<input type="hidden" name="pos_id" value="{{ el.id }}">
...
<button type="submit" class="btn btn-outline-success">Submit</button>
</form>
...
{% endfor %}
И каждое значение, которое вы хотите сделать POSTable, вы должны поместить внутрь <input ...>
или <select ...>
, например:
<select name="pos" form="pos_form_{{ el.id }}">
{% for tag in pos_tags %}
<option value="{{ tag.0 }}">{{ tag.1 }}</option>
{% endfor %}
</select>
Для приведенного выше примера я предполагаю, что вы добавите в контекст представления pos_tags
вот так:
{..., 'pos_tags': Pos.POS_TAGS}
И весь вид:
def index(request):
if request.method == 'POST':
pos = Pos.objects.get(id=int(request.POST['pos_id']))
pos.pos = request.POST['pos']
pos.save()
pos = Pos.objects.all()
return render(request, 'main/index.html', {'pos': pos, 'pos_tags': Pos.POS_TAGS})
Читайте больше информации о HTML Forms и Django Forms.