Доступ к модулю профиля пользователя SubClassed в Django 1.3 - PullRequest
0 голосов
/ 28 мая 2011

Я пытаюсь создать два пользовательских типа в django 1.3. Я создаю подкласс AUTH_PROFILE_MODULE со следующими моделями.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'

Есть идеи, чего не хватает?

1 Ответ

1 голос
/ 28 мая 2011

Либо укажите набор запросов:

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

или переопределить метод get 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(),),

Вам нужно переопределить 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)
...