【问题标题】:Accessing SubClassed User Profile Module in Django 1.3在 Django 1.3 中访问子类用户配置文件模块
【发布时间】:2011-05-27 22:11:52
【问题描述】:

我正在尝试在 django 1.3 中创建两种用户类型。我将 AUTH_PROFILE_MODULE 子类化为以下 models.py:

class Member(models.Model):
    ROLE_CHOICES = (
        (0, 'Guide'),
        (1, 'Operator'),
    )
    user = models.ForeignKey(User, unique=True)
    location = models.CharField(max_length=60)
    role = models.IntegerField(choices=ROLE_CHOICES)


class Guide(Member):
    bio = models.TextField(blank=True)
    experience = models.TextField(blank=True)
    image = models.ImageField(blank=True, upload_to='images')
    fileupload = models.FileField(blank=True, upload_to='files')

    def __unicode__(self):
        return self.user.username

    def get_absolute_url(self):
        return '/profiles/guides/%s' % self.user.username


class Operator(Member):
    bio = models.TextField(blank=True)
    image = models.ImageField(blank=True, upload_to='images')

    def __unicode__(self):
        return self.user.username

    def get_absolute_url(self):
        return '/profiles/operators/%s' % self.user.username

我正在使用基于通用类的视图,并且可以让 ListView 为 Guide 和 Operator 模型工作我无法让 DetailView 工作。我的views.py如下:

class GuideDetailView(DetailView):
    model = Guide
    context_object_name = 'guide'
    template_name = 'members/guide_detail.html'


class GuideListView(ListView):
    model = Guide
    context_object_name = 'guides'
    template_name = 'members/guide_list.html'

知道可能缺少什么吗?

【问题讨论】:

    标签: django django-class-based-views django-profiles


    【解决方案1】:

    或者提供一个查询集:

    class GuideDetailView(DetailView):
        queryset = Guide.objects.all()
    

    或者重写DetailView的get方法:

    class GuideDetailView(DetailView):
        def get(self):
            return "Everything you want, maybe: Guide.object.get(id=1)"
    

    在你的 urls.py 中给出这个:

    url(r'^(?P<my_id>\d)/$', GuideDetailView.as_view(),),
    

    你需要重写get,像这样:

    class GuideDetailView(DetailView):
        def get(self, request, **kwargs):
            # lookup Guide Id in your database and assign it object
            self.object = Guide.objects.get(pk=kwargs.get('my_id'))
            # add object to your context_data, so that you can access via your template
            context = self.get_context_data(object=self.object)
            return self.render_to_response(context)
    

    【讨论】:

    • 我按照您的建议添加了 queryset = Guide.objects.all(),但仍然收到 DetailView 需要 slug 或 pk 的错误。知道如何利用通过 url 传入的用户名作为 slug 值。
    • 你必须在你的urlconf中添加一个参数,比如:url(r'^$', GuideDetailView.as_view(), {'pk':1}),
    • 我已经编辑了我的帖子,你应该能够解决你的问题,覆盖 get 方法。
    • 感谢覆盖 get 方法。
    猜你喜欢
    • 2013-06-19
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2017-04-25
    • 2016-05-21
    • 1970-01-01
    相关资源
    最近更新 更多