我需要根据用户切换模型,在我看来。 我有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
我使用这种方法来分离内容,因为我需要根据用户/组隐藏许多数据。这些数据永远不会一起使用(素食主义者),永远不需要互动。
仍然非常感谢不同的方法/建议。
非常感谢。
答案 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()