@zhanka_sun

Почему данные с checkbox-а не сохраняются в базе?

Здравствуйте! Есть форма где можно редактировать данные базы. Когда меняю данные из текстовых полей то данные в базе тоже меняются, но когда выбираю пункты из чекбокса то в базе старые данные исчезают но новые тоже не сохраняются а просто заполняются null-ом.

models:
class test_dic2(models.Model):
    word2 = models.TextField(max_length = 100)
    emo2 = models.CharField(max_length = 100, choices=Emotion1)
    ton2 = models.CharField(max_length = 100, choices=Status1)
    rus2 = models.TextField(max_length = 100)
    eng2 = models.TextField(max_length = 100)
    syn2 = models.TextField(max_length = 100, null = True)
    slang = models.TextField(max_length = 100, null = True)
    cat_pol = models.BooleanField("pol", blank=True)
    cat_eco = models.BooleanField("eco",  blank=True)
    cat_med = models.BooleanField("med",  blank=True)
    cat_cul = models.BooleanField("cul", blank=True)
    cat_sport = models.BooleanField("sport",  blank=True)
    cat_all = models.BooleanField("all",  blank=True)
    date = models.DateTimeField(auto_now=True)


View:
def dic_edit(request, id):
    try: 
        d_edit = test_dic2.objects.get(id=id)
 
        if request.method == "POST":
            d_edit.word2 = request.POST.get("word2")
            d_edit.emo2 = request.POST.get("emo2")
            d_edit.ton2 = request.POST.get("ton2")
            d_edit.rus2 = request.POST.get("rus2")
            d_edit.eng2 = request.POST.get("eng2")
            d_edit.syn2 = request.POST.get("syn2")
            d_edit.cat_pol = request.POST.get("cat_pol")
            d_edit.cat_eco = request.POST.get("cat_eco")
            d_edit.cat_med = request.POST.get("cat_med")
            d_edit.cat_cul = request.POST.get("cat_cul")
            d_edit.cat_sport = request.POST.get("cat_sport")
            d_edit.cat_all = request.POST.get("cat_all")

            d_edit.save()
            return HttpResponseRedirect("/dictionary.html")
        else: 
            return render(request, 'app/dic_edit.html', {
                "d_edit": d_edit
                })
    except dic_kaz.DoesNotExist:
        return HttpResponseNotFound("<h2>Theme not found</h2>")


html:
<form method="post">
            <div>
                <table width="80%">
                                <tr>
                                    <td >Слово:</td>
                                    <td><input type="text" name="word2" size="50" value="{{d_edit.word2}}"/></td>
                                </tr>
                                <tr>
                                    <td>Эмоция:</td>
                                    <td>
                                        <select name="emo2" required_id ="{{d_edit.emo2}}" >
                                            <option value="{{d_edit.emo2}}" selected="{{d_edit.emo2}}">{{d_edit.emo2}}</option>   
                                        </select>
                                    </td>
                                </tr>
                                <tr>
                                    <td>Тональность:</td>
                                    <td>
                                        <select name="ton2" required_id ="{{d_edit.ton2}}" >
                                                <option value="{{d_edit.ton2}}" selected="{{d_edit.ton2}}">{{d_edit.ton2}}</option>
                                            </select>
                                    </td>
                                </tr>
                                <tr>
                                    <td>Синонимы:</td>
                                    <td><input type="text" name="syn2" size="50" value="{{d_edit.syn2}}"  /></td>
                                </tr>
                                <tr>
                                    <td>Сленги:</td>
                                    <td><input type="text" name="slang" size="50" value="{{d_edit.slang}}"/></td>
                                </tr>
                                <tr>
                                    <td>На русском:</td>
                                    <td><input type="text" name="rus2" size="50" value="{{d_edit.rus2}}"/></td>
                                </tr>
                                <tr>
                                    <td>На английском:</td>
                                    <td><input type="text" name="eng2" size="50" value="{{d_edit.eng2}}"/></td>
                                </tr>
                                <tr>
                                    <td>Категория</td>
                                    <td> <input  id="cat_pol" type="checkbox" value="{{d_edit.cat_pol}}" /> Политика </td>
                                            <input id="cat_eco" type="checkbox" value="{{d_edit.cat_eco}}" /> Экономика </td>
                                            <input id="cat_cul" type="checkbox" value="{{d_edit.cat_cul}}" /> Культура </td>
                                            <input id="cat_med" type="checkbox" value="{{d_edit.cat_med}}" /> Медицина </td>
                                           <td> <input id="cat_sport" type="checkbox" value="{{d_edit.cat_sport}}" /> Спорт </td>
                                           <td> <input id="cat_all" type="checkbox" value="{{d_edit.cat_all}}" /> Общее </td>
                                </tr>
                </table>
                <p>
                <button type="submit">Сохранить</button>
                <input type="button" onclick="history.back()" value="Отмена">
                </p>
            </div>
        </form>
  • Вопрос задан
  • 288 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
TLDR
input без name браузером не передаётся как элемент формы. Потому что у него нет name.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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