标签: modeladmin

Django ModelAdmin中的"list_display"可以显示ForeignKey字段的属性吗?

我有一个与Book有外键关系的Person模型.本书有很多领域,但我最关心的是"作者"(标准的CharField).

话虽如此,在我的PersonAdmin模型中,我想使用"list_display"显示"book.author".我已经尝试了所有这些明显的方法(见下文),但似乎没有任何效果.有什么建议?

class PersonAdmin(admin.ModelAdmin):
    list_display = ['book.author',]
Run Code Online (Sandbox Code Playgroud)

python django modeladmin django-models django-admin

278
推荐指数
13
解决办法
14万
查看次数

Django:从ModelAdmin中访问模型实例?

我在网上商店应用程序中有一个Orders模型,它有一个自动递增的主键和一个自己的外键,因为订单可以拆分成多个订单,但必须保持与原始订单的关系.

class Order(models.Model):
    ordernumber = models.AutoField(primary_key=True)
    parent_order = models.ForeignKey('self', null=True, blank=True, related_name='child_orders')
    # .. other fields not relevant here
Run Code Online (Sandbox Code Playgroud)

我已经为管理站点注册了OrderAdmin类.对于详细视图,我已经包含parent_orderfieldsets属性中.当然,默认情况下,它会列出选择框中的所有订单,但这不是所需的行为.相反,对于没有父订单的订单(即未从另一个订单拆分; parent_order是NULL/None),不应显示任何订单.对于已拆分的订单,此应仅显示单个父订单.

有一个相当新的ModelAdmin方法formfield_for_foreignkey,这似乎是完美的,因为查询集可以在其中进行过滤.想象一下,我们正在查看订单#11234的详细视图,该订单已从订单#11208拆分.代码如下

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'parent_order':
        # kwargs["queryset"] = Order.objects.filter(child_orders__ordernumber__exact=11234)
        return db_field.formfield(**kwargs)
    return super(OrderAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)

注释行在Python shell中运行时返回,返回单项查询集,其中包含#11234的#11208订单以及可能已从中拆分的所有其他订单.

当然,我们不能在那里硬编码订单号.我们需要引用ordernumber订单实例的字段,我们正在查看其详细信息页面.像这样:

kwargs["queryset"] = Order.objects.filter(child_orders__ordernumber__exact=?????)
Run Code Online (Sandbox Code Playgroud)

我发现没有办法替换????? 参考"当前"订单实例,我挖得很深.selfinside formfield_for_foreignkey指的是ModelAdmin实例,虽然它确实有一个model属性,但它不是订单模型实例(它是ModelBase引用; self.model()返回一个实例,但它的ordernumber是None).

一个解决方案可能是从request.path(/ admin/orders/order/11234 /)中提取订单号,但这真的很难看.我真的希望有更好的方法.

django modeladmin django-admin

44
推荐指数
2
解决办法
2万
查看次数

在django的admin(仅显示列表)中禁用编辑对象的链接?

在Django的管理员中,我想禁用 "选择要更改的项目"页面上提供的链接,以便用户无法去任何地方编辑项目.(我将限制用户可以对此列表执行的操作到一组下拉操作 - 没有实际编辑字段).

我看到Django能够选择显示链接的字段,但是,我看不出我怎么也没有.

class HitAdmin(admin.ModelAdmin):
    list_display = ('user','ip','user_agent','hitcount')
    search_fields = ('ip','user_agent')
    date_hierarchy = 'created'
    list_display_links = [] # doesn't work, goes to default
Run Code Online (Sandbox Code Playgroud)

任何想法如何获取我的对象列表没有任何链接编辑?

python django modeladmin django-admin

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

在django admin中更改列表显示链接

我正在尝试更改django管理列表显示中对象的链接.这是我到目前为止:

class FooModelAdmin(admin.ModelAdmin):
    fields = ('foo','bar')
    list_display = ('foo_link','bar')

    def foo_link(self,obj):
        return u'<a href="/foos/%s/">%s</a>' % (obj.foo,obj)
    domain_link.allow_tags = True
    domain_link.short_description = "foo"
Run Code Online (Sandbox Code Playgroud)

这在原始列表显示链接中产生另一个链接,例如

<a href="/admin/app/model/pk/"><a href="/foos/foo/">Foo</a></a>
Run Code Online (Sandbox Code Playgroud)

django modeladmin django-admin

23
推荐指数
4
解决办法
2万
查看次数

ModelAdmin排序?

使用Django Admin界面,您如何确保HTML select multiple中的对象按某种顺序排序(更喜欢按字母顺序)?问题是我有3个型号 - CD,Song,Singer.一个CD管理仪表板,宋是内联CD和歌手是一个很多的领域,我想排序!

我的model.py档案:

class CD(models.Model):

    cd_name = models.CharField("CD Name",max_length=50)
    date = models.DateField("CD Release Date")
    photo = models.ImageField("CD Cover",blank=True,upload_to='covers')
    singers = models.ManyToManyField(Singer,blank=True,null=True) 

    def __unicode__(self):
        return self.cd_name

class Song(models.Model):

    cid = models.ForeignKey(CD)
    track_num = models.PositiveIntegerField("Track Number",max_length=2) 
    song_name = models.CharField("Song Name",max_length=50)
    soloists = models.ManyToManyField(Singer,blank=True,null=True) 
    stream_url = models.URLField("Stream URL", blank=True)

    def __unicode__(self):
        return self.song_name

class Singer(models.Model): (not relevent)
Run Code Online (Sandbox Code Playgroud)

我的admin.py档案:

class SongInline(admin.TabularInline):
    model = Song
    extra = 0

class CDAdmin(admin.ModelAdmin):

    list_display = ('cd_name', 'date')

    inlines = [ …
Run Code Online (Sandbox Code Playgroud)

sorting django modeladmin

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

Wagtail ModelAdmin内联吗?

我使用的鹡鸰的ModelAdmin模块(一样的Django的ModelAdmin)将自定义添加Order模式,以鹡鸰管理。该模型具有自定义Address模型的外键。

我想AddressInspectView(已启用)中以内联方式显示模型(就像在django的admin中一样)。当前,它显示字符串表示形式。

python django modeladmin wagtail

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

Wagtail ModelAdmin 只读

使用 Wagtails 模型管理员:

有没有办法禁用编辑和删除选项,只留下检查视图?

我能想到的一种可能的方法是扩展模板,删除编辑和删除按钮,然后以某种方式禁用编辑和删除视图。

有没有更干净的方法?


编辑:多亏了 Loic 的回答,我才能弄清楚。

PermissionHelper 源代码也非常有帮助找出覆盖的正确方法。

仅显示检查视图的完整答案

class ValidationPermissionHelper(PermissionHelper):
    def user_can_list(self, user):
        return True  
    def user_can_create(self, user):
        return False
    def user_can_edit_obj(self, user, obj):
        return False
    def user_can_delete_obj(self, user, obj):
        return False

class ValidationAdmin(ModelAdmin):
    model = Validation
    permission_helper_class = ValidationPermissionHelper
    inspect_view_enabled = True
    [...]
Run Code Online (Sandbox Code Playgroud)

python django modeladmin wagtail

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

如何在ModelAdmin中动态处理Django中的表单字段?

我在模型中有一个“必需”的字段(子项),但想将ModelAdmin类中的字段更改为可选字段。如果用户未填写,则会由另一个字段(名称)自动填写。

class SomeModel(model.Model):
  name = model.CharField(max_length=255)
  slug = model.SlugField(unique=True, max_length=255)
Run Code Online (Sandbox Code Playgroud)

我尝试了各种方法,例如在ModelAdmin中覆盖get_form()或使用ModelForm类并专门指定表单。

class SomeModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super(self.__class__, self).get_form(request, obj, **kwargs)
        form.slug.required = False
        return form
Run Code Online (Sandbox Code Playgroud)

但是,这两种解决方案都不适合我。除了手动创建表单外,还有其他更快的解决方案吗?

我有很多这样的表格,而手工操作可能很繁琐且难以维护。

python forms django modeladmin

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

ModelAdmin,外键关系链

我想知道是否有可能以干净的方式在ModelAdmin中打印foreignkey链:

图像我们有这个结构:

class Ma(models.Model):
      fa = models.EmailField()

class Mb(models.Model):
      fb = models.ForeignKey('Ma')

class Mc(models.Model):
      name = models.CharField(max_length=50)
      fc = models.ForeignKey('Mb')
Run Code Online (Sandbox Code Playgroud)

现在使用ModelAdmin:

编辑:(这是无效的)

class McAdmin(admin.ModelAdmin):
     list_display = ('name', 'fc__fb__fa',)
Run Code Online (Sandbox Code Playgroud)

或者我该如何解决这个问题?

django modeladmin

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

在 wagtail 管理中添加子菜单

Wagtail 是一款非常棒的 CMS。我确实有一个问题如何在管理中添加子菜单。我有一个自定义模型位置,在该模型中我有 2 个外键。管理通过 modeladmin 创建的位置模型菜单。然而,为了管理城市或外键内容,我还需要在 modeladmin 中创建。

我只在 modeladmin 中看到一个将项目添加到设置菜单的选项。我的管理员需要的是以下内容

+ pages
++ ...
+ locations
++ locations
++ cities
++ tags
+ ...
Run Code Online (Sandbox Code Playgroud)

目前我只能通过 menu_order=200 确定顺序

有没有办法让 wagtail 中的导航有子导航

modeladmin wagtail

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