2014-11-20 2 views
0

Я хочу сохранить имя пользователя в базе данных, но это не сработает. Ниже приведен код. Я создал БД с именем User, и я пытаюсь сохранить пользователя, который принимал данные из созданного html-файла. И моя база данных Пользователь содержит только поле имени пользователя. Я использовал UserCrationForm по умолчанию, и моя база данных отображается как polls_user в phpmyadmin. Я не думаю, что это проблема. Когда я пытаюсь спасти от оболочки, ее работа, используя форму модели save.save() форма из django не сохраняется в DB

views.py 

def register_user(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      q = form.save(commit=False) 
      q.username = request.username 
      q.save() 
      return HttpResponseRedirect('/polls/login') 
    else: 
     messages.error(request, "Error") 
    args = {} 
    args.update(csrf(request)) 
    args['form'] = UserCreationForm() 
    return render_to_response('polls/register.html', args, context_instance= RequestContext(request)) 


register.html 

{% block content %} 
    <h2> Register</h2> 
     <form action="/polls/login/" method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="Register"> 
     </form> 
{% endblock %} 

Я не могу видеть, где проблема. Кто-нибудь поможет?

+0

Не работает? Вы получаете сообщения об ошибках где угодно? Если вы ничего не попробуете добавить несколько сообщений регистрации, которые помогут вам отлаживать. – AndersNS

+0

И добавьте форму и метод сохранения. – allcaps

+0

нет сообщений об ошибках. Я не знаю, есть ли у него соединение, но я использую еще 2 модели, у которых есть дополнительный ключ с этим, любая проблема с этим? – CapCapi

ответ

0

Проблема здесь: q.username = request.username .Это должно быть:

def register_user(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      q = User() #import your own User model here. 
      q.username = request.user.username 
      q.save() 
      return HttpResponseRedirect('/polls/login') 

PS: Это будет только вам имя пользователя, вошедшего в систему пользователя.

EDIT: (от комментариев) Как вы можете видеть, UserCreationForm является ModelForm, где в мета-класса, модель auth.User модель (проверка here). Таким образом, ваши данные сохраняются в auth.User. Так переопределить UserCreationForm как это (Если вы хотите использовать UserCreationForm):

#form 

class MyUserCreationForm(UserCreationForm): 

    class Meta: 
     model = PollUser #Your poll user model 
     fields = ("username",) 

#view 

if request.method == 'POST': 
      form = MyUserCreationForm(request.POST) 
      if form.is_valid(): 
       .... 

Для этого решения, вы должны иметь в виду, что вам нужно создать подкласс PollUser модель из auth.User модели. Если вы хотите использовать свою собственную модель PollUser (не подклассы от модели auth.User), то я предложу вам сделать новую модель для PollUser и не использовать UserCreationForm.

+0

все еще не работает .. – CapCapi

+0

Вы по-прежнему не получаете ни одного имени пользователя или просто пробела? Я думаю, что вы должны получить сообщение об ошибке, если используете модель аутентификации по умолчанию django (модель auth.User), поскольку имя пользователя не может быть здесь дублирующимся. Кроме того, можете ли вы показать свое определение модели здесь, если вы не используете модель авторизации django по умолчанию? – ruddra

+0

class User (models.Model): username = models.CharField (max_length = 200, unique = True) – CapCapi

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