Как изменить значение в 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: enter image description here

Затем я хочу изменить данные без ввода в редакторе: Django redactor

вот так: enter image description here просто измените значение на главной странице и нажмите ок для сохранения

Вы должны иметь 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.

Вернуться на верх