【问题标题】:Django -- Only Displaying Objects A User CreatedDjango -- 只显示用户创建的对象
【发布时间】:2013-05-29 17:28:58
【问题描述】:

我正在使用旧版数据库构建 Django 应用程序。我有一个模型 LIST,它来自那个遗留数据库,并且无法真正更改。我也在使用标准的 Django 用户模型。理想情况下,这就是我想要发生的事情。用户注册,注册后重定向以创建新的 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 对象时,list_id 都不会保存到我创建的 userProfile 表中。我什至不能 100% 确定我需要那张桌子。有人可以帮我吗?

【问题讨论】:

  • 您的 ListForm 看起来如何?
  • 我刚刚用我的 ListForm 更新了帖子。

标签: python django django-models django-forms django-urls


【解决方案1】:

在您的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

基本上,您需要做的就是创建一个用户配置文件对象。

【讨论】:

  • 我收到global name 'UserProfile' is not defined 错误。我在 view.py 文件中导入模型。我错过了什么?
  • 你需要做from models import UserProfile
  • 太棒了!一般说明:为什么我必须专门导入该模型,即使我正在导入模型?在我添加它并从我的 models.py 文件中删除信号之后,它工作得很好。感谢您最近帮了我很多忙,不胜感激!
  • 好吧..虽然您导入文件,但您需要专门导入模型对象,这是一个很好的功能,恕我直言,因为它可以减少名称冲突时的混乱。你甚至可以from .models import *
猜你喜欢
  • 1970-01-01
  • 2012-10-02
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多