1

レガシー DB を使用して Django アプリを構築しています。私は 1 つのモデル LIST を持っています。これはそのレガシー DB からのものであり、実際には変更できません。標準の 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 は次のようになります。

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', )

私のviews.pyは次のようになります:

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 オブジェクトを作成すると、作成した userProfile テーブルに list_id が保存されません。そのテーブルが必要かどうかは 100% 確信が持てません。誰かがここで私を助けてくれますか?

4

1 に答える 1

2

あなたのuser_create見解では、

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

基本的には、userprofile オブジェクトを作成するだけです。

于 2013-06-03T14:25:26.560 に答える