小编Nah*_*ing的帖子

Django将多个模型传递给一个模板

我正在建立一个地址簿,其中包括条目之间的关系等.我有个人,公司,场地和角色的单独模型.在我的索引页面上,我想列出每个模型的所有实例,然后过滤它们.这样一个人就可以轻松搜索并找到一个条目.我已经能够使用通用视图列出单个模型,并使用get_extra_context来显示另一个模型:

#views.py

 class IndividualListView(ListView):

    context_object_name = "individual_list"
    queryset = Individual.objects.all()
    template_name='contacts/individuals/individual_list.html'


class IndividualDetailView(DetailView):

    context_object_name = 'individual_detail'
    queryset = Individual.objects.all()
    template_name='contacts/individuals/individual_details.html'

    def get_context_data(self, **kwargs):
        context = super(IndividualDetailView, self).get_context_data(**kwargs)
        context['role'] = Role.objects.all()
        return context
Run Code Online (Sandbox Code Playgroud)

我还可以使用自定义视图列出单个模型:

#views.py
def object_list(request, model):
    obj_list = model.objects.all()
    template_name = 'contacts/index.html'
    return render_to_response(template_name, {'object_list': obj_list}) 
Run Code Online (Sandbox Code Playgroud)

以下是这两个测试的urls.py:

(r'^$', views.object_list, {'model' : models.Individual}),

(r'^individuals/$', 
    IndividualListView.as_view(),
        ),
(r'^individuals/(?P<pk>\d+)/$',
    IndividualDetailView.as_view(),

         ),
Run Code Online (Sandbox Code Playgroud)

所以我的问题是"如何修改它以将多个模型传递给模板?" 它甚至可能吗?StackOverflow上的所有类似问题只询问两个模型(可以使用get_extra_context解决).

django templates model views

35
推荐指数
3
解决办法
3万
查看次数

Django:一个模型中的多个通用关系设计不好吗?

我有一个具有多个通用关系的模型,在我的模板中使用它变得非常复杂.该模型是一个'演出'或音乐活动,发生在'Venue'和/或'Festival',并有一个'Musician'和/或'Ensemble'.

复杂的地方是每个'Gig'都有一个演示者,推广者和代理人.这些设置为与其他模型(如"PresenterCompany")的通用关系.演示者公司可以是推广者,演示者或代理人,或者是同一个演出者的所有人.以下是模型(简化为参考):

class Gig(models.Model):
    description = models.CharField(max_length=100, blank=True)
    date = models.DateTimeField()
    venue = models.ForeignKey(Venue)
    festival = models.ForeignKey(Festival, blank = True, null=True)
    musician = models.ManyToManyField(Musician, blank=True)
    ensembles = models.ManyToManyField(Ensemble, blank = True)

    presenter_content_type = models.ForeignKey(ContentType,
        limit_choices_to={"model__in": ("Individual", "ArtsOrganization",'Presenter', "BookingAgent","Festival", "OtherOrganization","PresenterCompany", "Venue")}, related_name = "Presenter Type", verbose_name = "Presenter",blank=True, null=True)
    presenter_id = models.IntegerField(db_index=True, blank=True, null=True, verbose_name='Presenter ID')
    presenter = generic.GenericForeignKey('presenter_content_type','presenter_id')

    promoter_content_type = models.ForeignKey(ContentType,
        limit_choices_to={"model__in": ("Individual", "ArtsOrganization","BookingAgent","Presenter", "Festival", "OtherOrganization","PresenterCompany", "Venue")}, related_name = "promotor", verbose_name='Promoter Type', blank=True, null=True)
    promoter_id = models.IntegerField(db_index=True, blank=True, null=True, verbose_name='Promoter …
Run Code Online (Sandbox Code Playgroud)

django models generic-relations

6
推荐指数
1
解决办法
610
查看次数

Django:在list_display中显示ManyToManyField和Generic Relation

我正在尝试使用list_display访问管理员中的字段.根据文档:(https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display),不支持ManyToManyFields.我通过创建这样的自定义方法来解决这个问题:

#models.py
class Gig
    musician = models.ManyToManyField(Musician)
    note = models.CharField(max_length=20)

    def __unicode__(self):
        return u'%s' % (self.note)

    def gig_musicians(self):
        return self.musician.all()

#admin.py
class GigAdmin
    list_display = ('note', 'gig_musicians')
Run Code Online (Sandbox Code Playgroud)

这给了我正在寻找的结果,但它非常难看(这也适用于通用关系).结果如下:

    [<Musician: Richard Bona>, <Musician: Bobby Mcerrin>]
Run Code Online (Sandbox Code Playgroud)

我认为这是因为我如何构建方法.你对如何使这更优雅,即只是名字有任何建议吗?

我尝试了其他解决方案,例如, django显示了很多地方的内容,但我无法让它为我工作(它只显示无)

django admin django-orm

1
推荐指数
1
解决办法
2492
查看次数