`
fdayok
  • 浏览: 28690 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

django 1.2 change_list 中显示ForeignKey中的列

阅读更多
有如下Model
from django.db import models
from django.utils.encoding import force_unicode

# Create your models here.

class People(models.Model):
    name = models.CharField(max_length = 200)
    def __unicode__(self):
        return force_unicode(self.name)

class Buy(models.Model):
    from_people = models.ForeignKey(People, related_name = 'sale')
    to_people = models.ForeignKey(People, related_name = 'buyer')
    price = models.IntegerField()
    def __unicode__(self):
        return force_unicode(u'%s-%s-%s' % (self.from_people, self.to_people, self.price))


欲在Buy对象的admin的change_list页面中显示from_people和to_people的名称,应该怎么做呢?


找到的定制方法如下:
admin.py
import django.contrib.admin.sites as djsite
import django.contrib.admin.options as djopt
from django.utils.encoding import force_unicode
from django.db.models.fields.related import RelatedField
import models as mym

def normal_format(val):
    return force_unicode(u'%s' % val)

def make_func(model, admin_order_field, format_fun = normal_format,
              short_description = None, allow_tags = False,
              use_self = False):
    lst = admin_order_field.split('__')
    def func_internal(self, obj = None):
        if not use_self:
            obj = self
        s = ''
        for s in lst:
            obj = getattr(obj, s, None)
            if not obj:
                return force_unicode(admin_order_field)
        return format_fun(obj)
    if not short_description:
        i = 0
        while i < len(lst):
            s = lst[i]
            i += 1
            model = model._meta.get_field_by_name(s)[0]
            if isinstance(model, RelatedField):
                model = model.rel.to
        short_description = model.verbose_name
    func_internal.short_description = short_description
    func_internal.allow_tags = allow_tags
    func_internal.admin_order_field = admin_order_field
    return func_internal

class PeopleModelAdmin(djopt.ModelAdmin):
    list_display = ['name']

class BuyModelAdmin(djopt.ModelAdmin):
    saler_name = make_func(mym.Buy, 'from_people__name')
    buyer_name = make_func(mym.Buy, 'to_people__name')
    list_display = [saler_name, buyer_name, 'price']

djsite.site.register(mym.People, PeopleModelAdmin)
djsite.site.register(mym.Buy, BuyModelAdmin)


#admin.py end

按照上面的方法修改后,change_list页面中的显示为:
分享到:
评论

相关推荐

    django1.2文档

    文档中包含的 `django1.2.chm` 和 `djangobook2ch.chm` 文件分别提供了 Django 1.2 的中文版和英文版官方文档,对于学习和查阅 Django 1.2 的相关知识非常有帮助。CHM 文件是一种帮助文件格式,包含了索引、搜索和...

    Python库 | django_celery_results-2.2.0.tar.gz

    这个库的版本为2.2.0,主要功能是为Celery任务提供持久化的结果存储,使得在Django项目中使用Celery时,可以方便地管理和检索异步任务的结果。 首先,我们来理解一下Django。Django是一款用Python编写的高级Web框架...

    PyPI 官网下载 | django_rename_app-0.1.1.tar.gz

    `django_rename_app` 这个库专注于解决Django项目中应用重命名的问题。在Django框架中,应用程序是包含模型、视图、模板和URL配置的独立单元,它们共同构成了一个功能完整的Web应用。当开发者需要修改应用的名称时,...

    PyPI 官网下载 | django_mock_queries-0.0.16.4.tar.gz

    标题中的"PyPI 官网下载 | django_mock_queries-0.0.16.4.tar.gz"表明这是一个从Python Package Index (PyPI)官方源下载的软件包,名为`django_mock_queries`,版本号为0.0.16.4,格式为tar.gz。PyPI是Python社区...

    Python库 | django_mongoengine_filter-0.3.1-py2.py3-none-any.whl

    它允许用户基于特定条件筛选MongoDB中的数据,类似于Django ORM中的过滤器。这使得开发者能够灵活地构建复杂查询,从而高效地从数据库中获取所需信息。 **安装与使用** 要使用`django_mongoengine_filter-0.3.1-py...

    PyPI 官网下载 | django_dnoticias_auth-1.2.7.1.tar.gz

    Django_dnoticias_auth则是Django生态中的一个授权(Authentication)模块,版本号1.2.7.1,意味着它是经过多次迭代和优化的成熟组件。在Python库中,这样的模块通常提供额外的功能或定制化服务,以增强Django的默认...

    Django python ERP_softwarecost_python项目_pythondjango_pythonERP_s

    ERP管理软件

    Python库 | django_counter_field_py3-0.0.1.2.tar.gz

    标题中的"Python库 | django_counter_field_py3-0.0.1.2.tar.gz"指出这是一个基于Python的软件包,具体来说是针对Django框架的一个扩展模块,名为`django_counter_field`. 这个版本号0.0.1.2表明它是该库的早期版本...

    PyPI 官网下载 | django_comments_xtd-1.2-py3.3.egg

    标题"PyPI 官网下载 | django_comments_xtd-1.2-py3.3.egg" 提供了关键信息,表明这是一个从Python Package Index(PyPI)官方源下载的软件包,名为`django_comments_xtd`,版本为1.2,适用于Python 3.3环境。...

    django_moviedbl_django_zip_

    2. **admin_changelist**:在Django的管理后台,`changelist`是用于显示对象列表的地方,允许用户查看、搜索、排序和操作数据。这里的`admin_changelist`可能包含自定义的视图或者模板,用于改变默认的后台列表展示...

    PyPI 官网下载 | django_trix_fork-0.3.1.2-py3-none-any.whl

    在给定的资源中,我们看到的是一个名为“django_trix_fork”的Python包的特定版本,即0.3.1.2。这个包以`.whl`文件格式提供,这是一种预编译的Python轮子文件,旨在简化安装过程。 **Python 轮子(Wheels)** `....

    Django 1.2 E-commerce

    ### Django 1.2 电子商务应用详解 #### 一、前言 随着互联网技术的不断发展,电子商务已经成为现代商业的重要组成部分。作为一款强大的Python Web框架,Django提供了丰富的工具和库来构建高性能、高安全性的Web...

    Python库 | django_live_log-1.1.2.tar.gz

    这会使得视图`my_view`的所有日志输出都实时显示在`django_live_log`的界面中。 在实际开发中,`django_live_log`不仅可以用于调试,还可以作为生产环境的监控工具。通过定制日志级别和过滤规则,可以有效地关注到...

    Django_Step_by_Step

    8. **应用间的关系和协作**:从3.5节的内容可以看出,Django项目中的各个应用可以互相协作,比如在views.py中可以引用模型来操作数据,在模板中可以显示视图生成的数据。 9. **用户认证系统**:文档中提到了login....

    Python库 | django_celery_ses-1.0.3-py3-none-any.whl

    2. 配置:在Django项目的settings.py中,配置Celery和AWS SES的相关参数,如AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY以及AWS_REGION等。 3. 集成:在Django的app中,使用`django_celery_ses`提供的邮件发送函数,...

    PyPI 官网下载 | django_minio_backend-2.7.0-py3-none-any.whl

    7. **Python库的使用**: 在Python项目中,通过`pip install django_minio_backend-2.7.0-py3-none-any.whl`命令,可以将这个Wheels包安装到Python环境中,然后在Django项目的设置中配置`django_minio_backend`作为...

    PyPI 官网下载 | django_idp_user-0.4.2.tar.gz

    标题中的"PyPI 官网下载 | django_idp_user-0.4.2.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的开源软件包,名为`django_idp_user`,版本为0.4.2,且已打包成`.tar.gz`格式。这种格式是Linux和Unix...

    PyPI 官网下载 | django_cors_headers_multi-1.2.0-py2-none-any.whl

    标题中的“PyPI 官网下载 | django_cors_headers_multi-1.2.0-py2-none-any.whl”指的是Python Package Index(PyPI)上发布的`django_cors_headers_multi`项目的1.2.0版本,这是一个适用于Python 2且不依赖特定硬件...

Global site tag (gtag.js) - Google Analytics