2013-11-20 3 views
0

views.pyviews.py 값을 user 값으로 지정하려고했지만 다음과 같은 오류가 발생하는 것 같습니다. Cannot assign "u'applematter'": "Student.user" must be a "User" instance. 다른 필드에 쓰고있는 것과 일치하도록 숨겨진 필드 사용자를 얻으려면 어떻게해야합니까?Django 1.6의 한 형식에서 다른 형식으로 변수를 전달하는 방법

views.py 파일

from django.shortcuts import render 
from django.http import HttpResponse 
from django.http import HttpResponseRedirect 
from famu.forms import * 
from django.contrib.auth.decorators import login_required 




@login_required(login_url='') 
def enroll(request): 
    if request.method == 'POST': 
     form = UserForm(request.POST,) 
     form2 = StudentCreate(request.POST) 
     if form.is_valid() and form2.is_valid(): 
      new_user = form.save(commit=False) 
      new_student = form2.save(commit=False) 
      new_student.user = (new_user.username) 
      new_user.save() 
      new_student.save() 

      return HttpResponseRedirect('/') 
    else: 
     form = UserForm# An unbound form 
     form2 = StudentCreate 

    return render(request, 'famu/enroll.html', { 
     'form': form, 
     'form2': form2 
    }) 

forms.py

from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.models import User 
from django import forms 
from famu.models import Student 



class UserForm(UserCreationForm): 

    class Meta: 
     model = User 
     fields = ('first_name', 'last_name', 'email','username',) 

class StudentCreate(forms.ModelForm): 


    class Meta: 
     model = Student 
     exclude =['user',] 

model.py

from django.db import models 
from django.contrib.auth.models import User 


class Student(models.Model): 
    CLASSIFICATION = (
     ('FR', 'Freshman'), 
     ('SO', 'Sophomore'), 
     ('JR', 'Junior'), 
     ('SR', 'Senior'), 
     ('GR', 'Graduate'), 
    ) 
    TERMS = (
     ('F', 'Fall'), 
     ('S', 'Spring'), 
     ('Su', 'Summer'), 
    ) 
    MAJOR = (
     ('CS', 'Computer Science'), 
     ('CY', 'Computer Systems'), 
     ('IT', 'Information Technology'), 
    ) 
    user = models.ForeignKey(User) 
    student_id = models.IntegerField(primary_key=True, max_length=9) 
    classification = models.CharField(max_length=2, choices=CLASSIFICATION) 
    enrolled_year = models.IntegerField(max_length=4) 
    enrolled_term = models.CharField(max_length=2, choices=TERMS) 
    major = models.CharField(max_length=2, choices=MAJOR) 
    street_number = models.IntegerField(max_length=10) 
    street_name = models.CharField(max_length=45) 
    apt_number = models.CharField('apt #', max_length=10, blank=True,) 
    city = models.CharField(max_length=30) 
    state = models.CharField(max_length=2) 
    zipcode = models.IntegerField('Zip Code', max_length=5,) 
    last_modified = models.DateTimeField(auto_now=True) 

답변

1

먼저 new_user 인스턴스를 저장 한 다음 새 학생 인스턴스를 할당해야합니다.

관련 코드 나는 것 할

@login_required(login_url='') 
def enroll(request): 
    if request.method == 'POST': 
     form = UserForm(request.POST,) 
     form2 = StudentCreate(request.POST) 
     if form.is_valid() and form2.is_valid(): 
      new_user = form.save(commit=False) 
      new_user.save() #form.save() should also work rather than this 2 statements 

      new_student = form2.save(commit=False) 
      new_student.user = new_user #assign user instance, not username 

      new_student.save() 
+0

는 쉽게하지만 당신이 큰 도움이되었습니다 – davidblak3

+0

감사에게 많은 트릭을 할 것 같았다이었다 알고 – davidblak3

관련 문제