2013-09-27 4 views
0

Я строю простое приложение для управления курсом. Я хочу, чтобы пользователи подписались на курс. Вот регистрация модель:Django forms: prepopulate form with request.user и параметр url

class CourseMembers(models.Model): 
    student = models.ForeignKey(Student) 
    course = models.ForeignKey(Course) 

    def __unicode__(self): 
     return unicode(self.student) 

Студенческая модель расширена модель пользователя - Я хотел бы, чтобы заполнить форму request.user. В модели курса наиболее важным является курс_ид, который я просматриваю через URL-адрес (например, http://127.0.0.1:8000/courses/course/1/).

То, что я хочу достичь, состоит в том, чтобы сгенерировать «невидимый» (так что пользователь не может изменить вставленные данные) с помощью только ввода, но содержащего параметр request.user и course_id.

+0

Вы хотите показать им все поля? Используете ли вы представления, основанные на классах, или просто ориентированные на функции представления? –

+0

Нет, я не хочу показывать какое-либо поле, просто кнопка ввода, которая отправляет request.user и course_id через сообщение. Я использую функции, основанные на представлениях. – Malyo

ответ

0

Вы хотите скрытые входы:

<input type="hidden" name="user" value="{{request.user}}"/> 

Я бы пройти в course_id в качестве контекста переменной лично, а не в ГЭТ:

<input type="hidden" name="course_id" value="{{course_id}}"/> 

Или вы можете получить значение из URL string, используя {{request.get_full_path}}, и некоторые нарезки.

+0

Ну, это не совсем моя проблема. Thing, мне действительно не нужны какие-либо поля ввода, поскольку оба значения присутствуют в моем представлении, я просто не знаю, как сохранить эти значения через хелпер формы django и запрос POST. – Malyo

+0

Это именно то, как вы это делаете - это скрытые значения формы - единственный способ передать эти данные через форму в POST. – professorDante

0

Я нашел ответ на свой вопрос. Так вот шаг за шагом: Сначала необходимо удалить все поля в ModelForm:

class AddCourseMemberForm(forms.ModelForm): 

    class Meta: 
     model = CourseMembers 
     fields = {} 

Как нет данных мы хотим получить через пользовательский ввод, мы просто отправить запрос пустой POST, а затем вставить данные непосредственно к нашей форме модели, а затем сохранить его:

if request.method == 'POST': 
    form = AddCourseMemberForm(request.POST) 
    if form.is_valid(): 
     form = form.save(commit=False) 
     form.student_id = user.id #from request.user 
     form.course_id = course.id #from url parameter i.e courses/course/1/ 
     form.save() 
     return redirect('index') 

Как я все еще учусь мне нужно знать, если это безопасный способ делать вещи, а также, если is_valid() метод имеет смысл. Я думаю, что мне нужно очистить курс. На всякий случай и, возможно, проверить правильность перед сохранением?

Смежные вопросы