根据用户切换型号

时间:2014-12-26 18:26:07

标签: django authentication django-models django-views

我需要根据用户切换模型,在我看来。 我有2个想法。

1)第一个想法

我有一个模型,我称之为Cakes(maaany属性)。这是抽象的。

class Cakes(models.Model):
    radius = models.IntegerField()
    class Meta:
        abstract = True

我延长了2次:素食蛋糕 - 非素食蛋糕

class VeganCakes(Cakes):
    class Meta:
        db_table = 'vegancakes'
class NonVeganCakes(Cakes):
    class Meta:
        db_table = 'nonvegancakes'

我的观点我做了类似的事情:

from cakes.models import *
# Cakes
# VeganCakes
# NonVeganCakes

标准视图可能是:

class CakesView(DetailView):
    template_name = "desserts/cake_view.html"
    model = Cakes
    context_object_name = 'Cake'
    def get_context_data(self, **kwargs):
        context = super(CakesView, self).get_context_data(**kwargs)
        return context

我想切换CakesView"模型"根据用户的字段。

萨莎,是一个非自愿组织。 杰西,是一个纯素组。

所以在视图中,模型变为:Cakes> > VeganCakes / NonVeganCakes

2)第二个想法 否则,我希望在观看之前做到这一点:

#if currentUser is Vegan
from cakes.models import Cakes as VeganCakes

#if currentUser is nonVegan
from cakes.models import Cakes as NonVeganCakes

我使用这种方法来分离内容,因为我需要根据用户/组隐藏许多数据。这些数据永远不会一起使用(素食主义者),永远不需要互动。

仍然非常感谢不同的方法/建议。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要覆盖视图的get_queryset方法。以下是default implementation,此处是docs

class CakesView(DetailView):
    template_name = "desserts/cake_view.html"
    model = Cakes
    context_object_name = 'Cake'

    def get_context_data(self, **kwargs):
        context = super(CakesView, self).get_context_data(**kwargs)
        return context

    def get_queryset(self):
        model_class = None
        if is_vegan:
            model_class = VeganCakes
        else:
            model_class = NonVeganCakes
        return model_class.objects.all()