2013-06-03 2 views
0

레거시 DB가있는 장고 응용 프로그램을 구축하고 있습니다. 나는 그 레거시 DB에서 왔고 실제로 변경할 수없는 하나의 모델, LIST를 가지고있다. 나는 표준 Django 사용자 모델을 사용하고있다. 이상적으로 이것은 내가 원하는 일입니다. 사용자가 등록한 후 가입 후 새 LIST 개체를 만들기 위해 리디렉션됩니다. 새 목록 개체가 만들어지면 사용자는 방금 만든 LIST 개체의 데이터가 들어있는보기로 리디렉션됩니다. 후속 로그인 한 사용자는 자신이 만든 LIST 객체의 데이터가 포함 된 뷰로 돌아갑니다. 지금의 나는이 같은 사용자 모델을 확장 한 :장고 - 객체 만 표시 사용자 생성

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    list_id = models.OneToOneField(List, null=True) 

def create_profile(sender, instance, created, **kwargs): 
    if created: 
     profile, created = UserProfile.objects.get_or_create(user=instance) 
    post_save.connect(create_profile, sender=User) 

내 ListForm은 다음과 같습니다

내 views.py는 다음과 같습니다
class ListForm(ModelForm): 
    error_css_class = 'text-error' 
    required_css_class = 'text-required' 

    class Meta: 
     model = models.List 
     fields = ('t_handle', 'facebook_id', 'pinterest_id', 'yelp_id', 'foursquare_id', 'yipit_id',) 

: 마지막으로

def user_signup(request): 
    if request.method == 'POST': 
     form = forms.UserSignupForm(data=request.POST) 
     if form.is_valid(): 
      user = form.save() 
      g = Group.objects.get(name='test_group') 
      g.user_set.add(user) 
      # log user in 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password1'] 
      user = authenticate(username=username, password=password) 
      login(request, user) 
      messages.success(request, u'Welcome to Social FollowUp') 
      return redirect('user_create') 
    else: 
     form = forms.UserSignupForm() 
    return TemplateResponse(request, 'user_signup.html', { 
     'form': form, 
    }) 

@login_required 
@permission_required('') 
def user_create(request): 
    if request.method == 'POST': 
     list_form = forms.ListForm(request.POST) 
     if list_form.is_valid(): 
      list_create = list_form.save() 
      messages.success(request, 'List {0} created'.format(list_create.list_id)) 
      return redirect(reverse('user_dashboard', args=(2,))) # 2 is just an example 
    else: 
     list_form = forms.ListForm() 

    return TemplateResponse(request, 'dashboard/create.html', {'list_form': list_form,   }) 


def user_dashboard(request, list_id): 
    try: 
     list_id = models.List.objects.get(pk=list_id) 
    except models.List.DoesNotExist: 
     raise Http404 
    return TemplateResponse(request, 'dashboard/view.html', {'list_id': list_id}) 

그리고 내 urls.py는 다음을 포함합니다 :

url(r'user/signup/$', views.user_signup, name='user_signup'), 
url(r'u/dashboard/(?P<list_id>\d+)/$', views.user_dashboard, name='user_dashboard'), 
url(r'u/list/create/$', views.user_create, name='user_create'), 

기본적으로 나는 일어나고 싶은 일을하는 법을 모릅니다. 사용자가 가입 한 다음 LIST 객체를 만들 때마다 list_id가 내가 만든 userProfile 테이블에 저장되지 않습니다. 나는 그 테이블이 필요하다고 100 % 확신하지 못한다. 누군가 나를 좀 도와 주실 수 있습니까? 당신의 user_create보기에서

+0

어떻게 ListForm이 보이나요? – karthikr

+0

방금 ​​내 ListForm으로 게시물을 업데이트했습니다. –

답변

2

,

def user_create(request): 
    if request.method == 'POST': 
     list_form = forms.ListForm(request.POST) 
     if list_form.is_valid(): 
      list_create = list_form.save() 
      messages.success(request, 'List {0} created'.format(list_create.list_id)) 
      up, _ = UserProfile.objects.get_or_create(user=request.user, list_id=list_create) 
      return redirect(reverse('user_dashboard', args=(2,))) # 2 is just an example 

    #rest of the code 

는 기본적으로, 당신이 오직 할 필요가있는 사용자 프로필 개체를 만드는 것입니다.

+1

'전역 이름 'UserProfile'is not defined '오류가 발생합니다. view.py 파일에서 모델을 가져오고 있습니다. 내가 뭘 놓치고 있니? –

+0

당신은'from models import UserProfile'을해야합니다 – karthikr

+1

굉장! 일반적인주의 사항 : 모델을 가져 오더라도 해당 모델을 특별히 가져와야하는 이유는 무엇입니까? 추가 한 후, 내 models.py 파일에서 신호를 제거한 후 잘 작동했습니다. 최근에 무리를 도와 줘서 고마워, 고마워! –