Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Изменение данных формы полученной через POST - как и надо ли вообще? [RSS Feed]

#1 Июль 7, 2012 17:15:38

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение данных формы полученной через POST - как и надо ли вообще?

Вкраце: есть как бы чат с регистрацией и авторизацией пользователей, есть модель

class ChatMessage(models.Model):
    message_text = models.CharField(max_length=3000)
    message_time = models.DateTimeField()
    message_author = models.CharField(max_length=30)

Мне подумалось, что в общем случае правильно будет форму для отправки сообщения определять от класса ModelForm:
class SendMessage(forms.ModelForm):
    class Meta:
        model = ChatMessage
        exclude = ('message_author', 'message_time',)
        widgets = {
            'message_text': Textarea,
        }
Автора исключаем потому как он авторизован, а время должно быть текущим.

В результате в нашу функцию:
def ShowMessages(request):
    if request.method == 'POST':
        print 'post method\n'
        form = SendMessage(request.POST)
        print form
        messages = ChatMessage.objects.all()
        return render_to_response('chat/templates/messages.html', {'messages': messages})
    else:
        messages = ChatMessage.objects.all()
        return render_to_response('chat/templates/messages.html', {'messages': messages})
передаётся только текст сообщения с соответствующими html тегами. Как правильно добавить в form недостающую информацию с именем пользователя и временем отправки, чтобы потом можно было вызвать метод save()? Или Подобные задачи в принципе иначе решаются?

Офлайн

#2 Июль 8, 2012 10:59:57

plurk89
От:
Зарегистрирован: 2011-06-09
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение данных формы полученной через POST - как и надо ли вообще?

Пользователя берите из request.user
И посмотрите в сторону Class-based views



Офлайн

#3 Июль 8, 2012 11:05:22

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение данных формы полученной через POST - как и надо ли вообще?

Это понятно, а как его потом приделать к form, чтобы записать всё в базу через form.save(), с целью минимизации телодвижений? Там же в form ещё html-разметка. Есть способ какой-нибудь? Что-нибудь типа form.append(request.user)

Отредактировано S (Июль 8, 2012 11:07:20)

Офлайн

#4 Июль 9, 2012 05:40:18

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

Изменение данных формы полученной через POST - как и надо ли вообще?

message_author = models.CharField(max_length=30)
Не понял юмора, а почему не так
from django.contrib.auth.models import User
.....
.....
message_author = models.ForeignKey(User)

Ну а потом все совсем просто
form=MyForm(initial={'message_author':request.user})



Отредактировано FishHook (Июль 9, 2012 05:40:43)

Офлайн

#5 Июль 9, 2012 05:44:00

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение данных формы полученной через POST - как и надо ли вообще?

FishHook
message_author = models.CharField(max_length=30)
Не понял юмора, а почему не так
from django.contrib.auth.models import User
.....
.....
message_author = models.ForeignKey(User)

Ну а потом все совсем просто
form=MyForm(initial={'message_author':request.user})

Потому что только учусь. Спасибо, с работы приду, буду разбираться.

Офлайн

#6 Июль 10, 2012 07:33:03

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение данных формы полученной через POST - как и надо ли вообще?

FishHook
Ну а потом все совсем просто
form=MyForm(initial={'message_author':request.user})
А если в классе формы написано:
exclude = ('message_author', 'message_time',)
Это будет работать? Потому как делаю так, даже не получая ничего через POST:
def ShowMessages(request):
    if request.method == 'POST':
        print 'method: POST\n'
        form = SendMessage(initial={'message_author':request.user, 'message_text': 'initial message_text', 'message_time': 'message_time'})
        print form
И print form выводит только “initial message_text”
Или exclude нужно убирать и делать поля формы скрытыми, что авторизованный пользователь не видел поля для ввода логина и времени

Офлайн

#7 Июль 10, 2012 07:54:46

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

Изменение данных формы полученной через POST - как и надо ли вообще?

S
Или exclude нужно убирать и делать поля формы скрытыми
Именно



Офлайн

#8 Июль 10, 2012 08:30:40

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение данных формы полученной через POST - как и надо ли вообще?

Тогда и время будет также в скрытом поле в той же форме, я правильно понимаю? И каждый раз будет передаваться одно и тоже значение времени - то, в которое была сгенерирована форма для отправления сообщения. А если она не меняется? Ифрейм там, или ещё как.
И я конечно только начинаю разбираться, но передача имени пользователя из скрытого поля мне тоже кажется странной.
Щас разбираюсь как jquery chat работает, смотрю, чего там.

Офлайн

#9 Июль 10, 2012 08:39:45

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

Изменение данных формы полученной через POST - как и надо ли вообще?

S
Тогда и время будет также в скрытом поле в той же форме, я правильно понимаю? И каждый раз будет передаваться одно и тоже значение времени - то, в которое была сгенерирована форма для отправления сообщения. А если она не меняется? Ифрейм там, или ещё как.
И я конечно только начинаю разбираться, но передача имени пользователя из скрытого поля мне тоже кажется странной.
Щас разбираюсь как jquery chat работает, смотрю, чего там.
Зачем тебе передавать время на сторону пользователя? Сделай в поле модели где время
default=datetime.now()
>>>передача имени пользователя
Зачем имя? Айдишник же.



Офлайн

  • Начало
  • » Django
  • » Изменение данных формы полученной через POST - как и надо ли вообще?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version