Найти - Пользователи
Полная версия: Изменение данных формы полученной через POST - как и надо ли вообще?
Начало » Django » Изменение данных формы полученной через POST - как и надо ли вообще?
1
S
Вкраце: есть как бы чат с регистрацией и авторизацией пользователей, есть модель
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()? Или Подобные задачи в принципе иначе решаются?
plurk89
Пользователя берите из request.user
И посмотрите в сторону Class-based views
S
Это понятно, а как его потом приделать к form, чтобы записать всё в базу через form.save(), с целью минимизации телодвижений? Там же в form ещё html-разметка. Есть способ какой-нибудь? Что-нибудь типа form.append(request.user)
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})
S
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})

Потому что только учусь. Спасибо, с работы приду, буду разбираться.
S
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 нужно убирать и делать поля формы скрытыми, что авторизованный пользователь не видел поля для ввода логина и времени
FishHook
S
Или exclude нужно убирать и делать поля формы скрытыми
Именно
S
Тогда и время будет также в скрытом поле в той же форме, я правильно понимаю? И каждый раз будет передаваться одно и тоже значение времени - то, в которое была сгенерирована форма для отправления сообщения. А если она не меняется? Ифрейм там, или ещё как.
И я конечно только начинаю разбираться, но передача имени пользователя из скрытого поля мне тоже кажется странной.
Щас разбираюсь как jquery chat работает, смотрю, чего там.
FishHook
S
Тогда и время будет также в скрытом поле в той же форме, я правильно понимаю? И каждый раз будет передаваться одно и тоже значение времени - то, в которое была сгенерирована форма для отправления сообщения. А если она не меняется? Ифрейм там, или ещё как.
И я конечно только начинаю разбираться, но передача имени пользователя из скрытого поля мне тоже кажется странной.
Щас разбираюсь как jquery chat работает, смотрю, чего там.
Зачем тебе передавать время на сторону пользователя? Сделай в поле модели где время
default=datetime.now()
>>>передача имени пользователя
Зачем имя? Айдишник же.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB