Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » почему при изменении значений формы возвращается unicode? [RSS Feed]

#1 Окт. 23, 2012 11:15:37

makcstroi
Зарегистрирован: 2012-10-23
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

день добрый!
сделал, чтобы со страницы можно было вносить изменения в форму
html:

{% if edit_note %}
<div id="editNote" class="newNote" style="display: block;">
<form action="/notebook/" method="post">{% csrf_token %}
<input type="submit" value="Изменить запить № {{ edit_note.id }}">
<input type="hidden" name="edit_note" value="1">
<input type="hidden" name="num_note" value="{{ edit_note.id }}">
<p>
<label for="id_surname">фамилия:</label>
<input id="id_surname" type="text" name="surname" maxlength="100" value={{ edit_note.surname }}>
</p>
<p>
<label for="id_name">имя:</label>
<input id="id_name" type="text" name="name" maxlength="100" value={{ edit_note.name }}>
</p>
<p>
<label for="id_fathername">отчество:</label>
<input id="id_fathername" type="text" name="fathername" maxlength="100"  value={{ edit_note.fathername }}>
</p>
</form>
</div>
{% endif %}

view.py:
if request.method == "POST" and request.POST['edit_note'] == '1':
    nn = Notebook.objects.get(id = request.POST['num_note'])
    nn.surname    = request.POST['surname'],
    nn.name       = request.POST['name'],
    nn.fathername = request.POST['fathername'],
    nn.save()
    return redirect('/notebook/')

всё вроде хорошо, изменения вносятся, только выводятся потом вида (u'Ivanov',) (u'Ivan',) (u'Ivanovich',) а требуется просто Ivanov Ivan Ivanovich

Подскажите пожалуйста, где копать?

Офлайн

#2 Окт. 23, 2012 11:28:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

Покажи модель



Офлайн

#3 Окт. 23, 2012 11:30:52

makcstroi
Зарегистрирован: 2012-10-23
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

class Notebook(models.Model):
    """ записная книжка """
    owner  = models.ForeignKey(User, null=True, related_name='notebooks')
    cat = models.CharField(max_length=255, verbose_name='категория')
    surname = models.CharField(max_length=255, verbose_name='фамилия')
    name = models.CharField(max_length=255, verbose_name='имя')
    fathername = models.CharField(max_length=255, verbose_name='отчество')
    number = models.CharField(max_length=255, verbose_name='тефонный номер')
    city = models.CharField(max_length=255, verbose_name='город', null = True, blank = True)
    street = models.CharField(max_length=255, verbose_name='улица', null = True, blank = True)
    house = models.CharField(max_length=255, verbose_name='дом', null = True, blank = True)
    room = models.CharField(max_length=255, verbose_name='квартира', null = True, blank = True)
    class Meta:
        verbose_name = 'записная книга'
        verbose_name_plural = 'записная книга'
    def __unicode__(self):
        return (" %s, %s, %s ") % (self.surname, self.name, self.fathername)

Офлайн

#4 Окт. 23, 2012 11:31:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

Вообще странный подход, зачем эти танцы, ведь лучше, правильней и проще сделать форму от модели.
Да и вот эти

<input type="hidden" name="edit_note" value="1">
<input type="hidden" name="num_note" value="{{ edit_note.id }}">
А если юзер хитрожопый и изменит эти значения?



Офлайн

#5 Окт. 23, 2012 11:35:07

makcstroi
Зарегистрирован: 2012-10-23
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

согласен строчку <input type=“hidden” name=“edit_note” value=“1”> можно убрать, а вот как обойтись без <input type=“hidden” name=“num_note” value=“{{ edit_note.id }}”>? И как всё таки быть с unicodom?

Офлайн

#6 Окт. 23, 2012 11:51:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

А как ты в контекст добавляешь edit_note? Покажи всю вьюшку.



Офлайн

#7 Окт. 23, 2012 11:59:51

makcstroi
Зарегистрирован: 2012-10-23
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

# coding: utf-8
import datetime, time
from django.db import models
from django.contrib.auth.models import User
from userena.models import UserenaBaseProfile
class UserProfile(UserenaBaseProfile):
    user = models.OneToOneField(User)
    birthday = models.DateField( blank = True, null = True )
    weight = models.IntegerField( blank = True, null = True )
    height = models.IntegerField( blank = True, null = True )
    created_at = models.DateTimeField( auto_now_add = True )
    updated_at = models.DateTimeField( auto_now = True )
def user_post_save(sender, instance, **kwargs):
    (profile, new) = UserProfile.objects.get_or_create(user=instance)
models.signals.post_save.connect(user_post_save, sender=User)
class Prioritet(models.Model):
    name = models.CharField(max_length=50, verbose_name='приоритет')
    def __unicode__(self):
        return self.name
    class Meta:
        verbose_name='Приоритеты'
        verbose_name_plural='Приоритеты'
class Master(models.Model):
    login = models.CharField(max_length=255, unique= True)
    password  = models.CharField(max_length=50)
    online    = models.BooleanField()
    class Meta:
        verbose_name = 'Юзер'
        verbose_name_plural = 'Юзеры'
    def __unicode__(self):
        return self.login
class Tasks(models.Model):
    """ поставленные задачи """
    task = models.CharField(max_length=255, verbose_name='задача')
    dateAdded = models.DateTimeField(default = datetime.datetime.now() + datetime.timedelta(hours = 6))
    class Meta:
        verbose_name = 'задача'
        verbose_name_plural = 'задачи поставленные'
    def __unicode__(self):
        return self.task
class TasksDone(models.Model):
    """ выполненные задачи """
    task = models.CharField(max_length=255, verbose_name='задача')
    dateDone = models.DateTimeField(auto_now_add=True)
    activePeriod = models.IntegerField(blank = True, null = True)
    class Meta:
        verbose_name = 'задача (устар)'
        verbose_name_plural = 'задачи выполненые (устар)'
    def __unicode__(self):
        return self.task
class Notebook(models.Model):
    """ записная книжка """
    owner  = models.ForeignKey(User, null=True, related_name='notebooks')
    cat = models.CharField(max_length=255, verbose_name='категория')
    surname = models.CharField(max_length=255, verbose_name='фамилия')
    name = models.CharField(max_length=255, verbose_name='имя')
    fathername = models.CharField(max_length=255, verbose_name='отчество')
    number = models.CharField(max_length=255, verbose_name='тефонный номер')
    city = models.CharField(max_length=255, verbose_name='город', null = True, blank = True)
    street = models.CharField(max_length=255, verbose_name='улица', null = True, blank = True)
    house = models.CharField(max_length=255, verbose_name='дом', null = True, blank = True)
    room = models.CharField(max_length=255, verbose_name='квартира', null = True, blank = True)
    class Meta:
        verbose_name = 'записная книга'
        verbose_name_plural = 'записная книга'
    def __unicode__(self):
        return (" %s, %s, %s ") % (self.surname, self.name, self.fathername)
class TasksCats(models.Model):
    cat = models.CharField(max_length=255, verbose_name='категория')
    class Meta:
        verbose_name = 'категория'
        verbose_name_plural = 'категории'
    def __unicode__(self):
        return self.cat
class Plans(models.Model):
    """ задачи на новый лад """
    master = models.ForeignKey(Master)
    prioritet = models.ForeignKey(Prioritet, null = True)
    cat = models.ForeignKey(TasksCats)
    task = models.TextField(verbose_name='План')
    dateCreate = models.DateTimeField(auto_now_add=True, verbose_name='дата создания')
    dateDone = models.DateTimeField(null=True, verbose_name='дата выполнения')
    dateActual = models.DateTimeField(verbose_name='дата актуальности', blank = True, null = True)
    comment = models.TextField(verbose_name='комментарий', blank = True, null = True)
    class Meta:
        verbose_name = 'план'
        verbose_name_plural = 'планы'
    def __unicode__(self):
        return (" %s, %s ") % (self.task, self.cat)

Офлайн

#8 Окт. 23, 2012 12:11:16

makcstroi
Зарегистрирован: 2012-10-23
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

# coding: utf-8
import datetime
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, redirect
from django.core.context_processors import csrf
from django.template.context import RequestContext
from django.views.generic.simple import direct_to_template
from phone_book.models import Tasks, TasksDone, Notebook, Master, Plans
from phone_book.forms import Auth, f_notebook
from django import forms
form = f_notebook()
@login_required
def main(request):
    """    главная страница проекта    """
    return render_to_response('index.html', RequestContext(request))
@login_required
def auth(request):
    if request.method == 'POST': # если была попытка авторизации
        error = ''
        global login
        login = request.POST['login']
        password = request.POST['pass']
        logins =[]
        l = Master.objects.all().values('login')
        for item in l: # список всех логинов
            logins.append(item['login'])
        if login in logins:
            p = Master.objects.get(login = login)
            if p.password == password:
                message = 'Wellcome %s' % login
            else:
                message = 'Wrong password'
        else:
            message = 'login %s do not exist' % login
    else:
        login = False
    return redirect(request.META['HTTP_REFERER'])
@login_required
def exit(request):
    ''' Выход пользователя '''
    message = False
    login = False
    tp = request.META['HTTP_REFERER']
    tp = tp.replace('http://localhost:8000', '')
    tp = tp.replace('/', '')
    tp = str(tp)
    tp = tp + '.html'
    if tp == 'exit.html':
        tp = 'index.html'
    return render_to_response(tp, {'login': login, 'message': message})
@login_required
def plans(request):
    """ задачи на новый лад """
    #plans = request.user.plans.all()
    return render_to_response('plans.html', {'plans': plans}, RequestContext(request))
@login_required
def tasks(request):
    """ отображение списка задач по данному проекту. Задачи беруться из БД , а добавляются с этой же страницы """
    result = {}
    result.update(csrf(request))
    try:
        if request.POST['new_task'] and request.POST['new_task'] != '':
            new_task = request.POST['new_task']
            tasks = Tasks.objects.all()
            tasks = Tasks(task = new_task)
            tasks.save()
            return redirect('/tasks/')
    except:
        pass
    tasks = Tasks.objects.all()
    tasksDone = TasksDone.objects.order_by('-id')
    result.update({'tasks': tasks, 'tasksDone': tasksDone})
    return render_to_response('tasks.html', result, RequestContext(request))
@login_required
def tasks_selected(request, task_id):
    """ отправляем задачу в список выполненных """
    # получаем выполненную задачу  и дату добавления
    this = Tasks.objects.get(id = task_id)
    dateAdded = str(this.dateAdded)
    delta = datetime.timedelta(hours=2)
    dateNow = str(datetime.datetime.now() -delta)
    # dateDelta = dateNow.replace(tzinfo=None) - dateAdded.replace(tzinfo=None)
    # dateDelta = dateDelta.seconds
    # открываем таблицу выполненных задач для заполнения
    tasks_done = TasksDone.objects.all()
    # добавляем новую запись (т.е. выполненную задачу)
    tasks_done = TasksDone(task = this.task)
    tasks_done.save()
    # удаляем выполненную задачу из поставленных
    this.delete()
    return redirect('/tasks/')
@login_required
def tasks_done(request, task_id):
    """ возвращаем задачу в доработку """
    # получаем якобы выполненную задачу
    this = TasksDone.objects.get(id = task_id)
    # открываем таблицу поставленных задач для заполнения
    tasks = Tasks.objects.all()
    # добавляем новую запись (т.е. выполненную задачу)
    tasks = Tasks(task = this.task)
    tasks.save()
    # удаляем выполненную задачу из поставленных
    this.delete()
    return redirect('/tasks/')
@login_required
def notebook(request):
    """ записная книжка """
    try:
        if request.method == "POST" and request.POST['add_note'] == '1':
            if ' ' in request.POST['cat']:
                new_cat = request.POST['cat'].replace(' ', '_')
            else:
                new_cat = request.POST['cat']
            nn = Notebook(
                          owner      = request.user,
                          cat        = new_cat,
                          surname    = request.POST['surname'],
                          name       = request.POST['name'],
                          fathername = request.POST['fathername'],
                          number     = request.POST['number'],
                          city       = request.POST['city'],
                          street     = request.POST['street'],
                          house      = request.POST['house'],
                          room       = request.POST['room'],
            )
            nn.save()
            return redirect('/notebook/')
    except:
        pass
    if request.method == "POST" and request.POST['edit_note'] == '1':
        nn = Notebook.objects.get(id = request.POST['num_note'])
        nn.cat        = request.POST['cat'],
        nn.surname    = request.POST['surname'],
        nn.name       = request.POST['name'],
        nn.fathername = request.POST['fathername'],
        nn.number     = request.POST['number'],
        nn.city       = request.POST['city'],
        nn.street     = request.POST['street'],
        nn.house      = request.POST['house'],
        nn.room       = request.POST['room'],
        nn.save()
        return redirect('/notebook/')
    notebook = request.user.notebooks.all()
    cats_list = []
    for item in notebook:
        if item.cat not in cats_list:
            cats_list.append(item.cat)
    return render_to_response(
                              'notebook.html',
                             {'notebook': notebook, 'form': form, 'cats_list': cats_list},
                               RequestContext(request)
                             )
@login_required
def note_sort(request, sort):
    """ фильтр категорий """
    if sort == 'all_cats':
        notebook = request.user.notebooks.all()
    else:
        notebook = request.user.notebooks.filter(cat = sort)
    cats_list = []
    n = request.user.notebooks.values('cat')
    for item in n:
        if item['cat'] not in cats_list:
            cats_list.append(item['cat'])
    return render_to_response('notebook.html', {'notebook': notebook, 'cats_list': cats_list, 'form': form}, RequestContext(request))
def note_order(request, order):
    """ сортировка по фамилии """
    if order == 'id':
        notebook = Notebook.objects.all().order_by('id')
    if order == 'name':
        notebook = Notebook.objects.all().order_by('name')
    if order == 'surname':
        notebook = Notebook.objects.all().order_by('surname')
    if order == 'fathername':
        notebook = Notebook.objects.all().order_by('fathername')
    if order == 'number':
        notebook = Notebook.objects.all().order_by('number')
    if order == 'cat':
        notebook = Notebook.objects.all().order_by('cat')
    return render_to_response('notebook.html', {'notebook': notebook, 'form': form,})
def purse_del(request, cat_del):
    notebook = Notebook.objects.filter(cat = cat_del)
    notebook.delete()
    return redirect('/notebook/')
def del_note(request, note):
    n = Notebook.objects.get(id = note)
    n.delete()
    return redirect('/notebook/')
def edit_note(request, note):
    notebook = Notebook.objects.all()
    edit_note = Notebook.objects.get(id = note)
    cats_list = []
    n = request.user.notebooks.values('cat')
    for item in n:
        if item['cat'] not in cats_list:
            cats_list.append(item['cat'])
    return render_to_response('notebook.html', {'notebook': notebook,
                                                'edit_note': edit_note,
                                                'form': form,
                                                'cats_list': cats_list,
                                                }, RequestContext(request))

Модератор: Используйте тег code

Отредактировано cutwater (Окт. 23, 2012 12:50:40)

Офлайн

#9 Окт. 23, 2012 12:56:36

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

makcstroi
что за facepalm.jpg?

Читаем отсюда и дальше



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#10 Окт. 23, 2012 13:54:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

почему при изменении значений формы возвращается unicode?

def note_order(request, order):
    """ сортировка по фамилии """
    if order == 'id':
        notebook = Notebook.objects.all().order_by('id')
    if order == 'name':
        notebook = Notebook.objects.all().order_by('name')
    if order == 'surname':
        notebook = Notebook.objects.all().order_by('surname')
    if order == 'fathername':
        notebook = Notebook.objects.all().order_by('fathername')
    if order == 'number':
        notebook = Notebook.objects.all().order_by('number')
    if order == 'cat':
        notebook = Notebook.objects.all().order_by('cat')
    return render_to_response('notebook.html', {'notebook': notebook, 'form': form,})

def note_order(request, order):
     notebook = Notebook.objects.all().order_by(order)
     return render_to_response('notebook.html', {'notebook': notebook, 'form': form,})

Хотя я и не понимаю, каким волшебным образом в этой функции появился form, ну это ничего, это ладно, но вывалив триста строк без форматирования ты чуть не убил во мне веру в человечество.



Отредактировано FishHook (Окт. 23, 2012 13:56:56)

Офлайн

  • Начало
  • » Django
  • » почему при изменении значений формы возвращается unicode?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version