2011-05-27 71 views
0

我想在django 1.3中創建兩個用戶類型。我子類AUTH_PROFILE_MODULE具有以下models.py:訪問Django 1.3中的子類用戶配置文件模塊

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控件爲指南和操作模式我不能得到的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' 

任何想法可能會丟失什麼?

回答

1

要麼提供一個查詢集:

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

或覆蓋的DetailView的獲得方法:

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

你需要重寫得到,像這樣:

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) 
+0

我按照你的建議添加了queryset = Guide.objects.all(),但仍然得到一個錯誤,即DetailView需要一個slug或pk。任何想法如何利用通過url爲slug值傳入的用戶名。 – thesteve 2011-05-27 23:08:42

+0

你必須在你的urlconf中添加一個參數,例如:url(r'^ $',GuideDetailView.as_view(),{'pk':1}), – jazz 2011-05-27 23:18:55

+0

我編輯了我的帖子,你應該能夠解決你的問題覆蓋get方法的問題。 – jazz 2011-05-28 07:58:48

相關問題