【问题标题】:Django Admin does not display pre-existing objects [closed]Django Admin 不显示预先存在的对象 [关闭]
【发布时间】:2017-10-29 10:15:08
【问题描述】:

我创建了一个类,用于将 Django-Admin 暴露给多个数据库,如 Django 文档中所述。

我的 admin.py 看起来像这样

from django.contrib import admin

# Register your models here.
from .models import DestinationMap


class MultiDBModelAdmin(admin.ModelAdmin):
    # A handy constant for the name of the alternate database.
    using = 'supplierui'

    def save_model(self, request, obj, form, change):
        # Tell Django to save objects to the 'other' database.
        obj.save(using=self.using)

    def delete_model(self, request, obj):
        # Tell Django to delete objects from the 'other' database
        obj.delete(using=self.using)

    def queryset(self, request):
        # Tell Django to look for objects on the 'other' database.
        return super(MultiDBModelAdmin, self).queryset(request).using(self.using)

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        # Tell Django to populate ForeignKey widgets using a query
        # on the 'other' database.
        return super(MultiDBModelAdmin, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)

    def formfield_for_manytomany(self, db_field, request=None, **kwargs):
        # Tell Django to populate ManyToMany widgets using a query
        # on the 'other' database.
        return super(MultiDBModelAdmin, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)



admin.site.register(DestinationMap, MultiDBModelAdmin)


#admin.site.register(DestinationMap)

管理界面显示模型名称,但有 0 个对象。

该表包含275个对象,我已经确认使用sql。

到目前为止,我找不到任何解决方案。 帮助将不胜感激。

【问题讨论】:

  • The table contains 275 objects 那么你到底为什么要创建一个类来将 Django-Admin 暴露给多个数据库,如 Django 文档中所述,此功能适用于您拥有数千万条记录并且可以不再垂直缩放
  • @e4c5 因为我正在使用多个数据库,我需要定期(手动)将对象添加到该表中。如果我的方法是错误的,请您解释一下我该如何完成这项任务?我正在使用 Postgres 数据库来保存 2 张表,一张有大约 10M 条记录,一张有 275 条记录。我需要使用 django-admin 将记录添加到后者。
  • 我真的不明白为什么不能将此表添加到现有数据库中。但是如果没有更多详细信息,例如您的设置、路由器等,就无法回答这个问题
  • @e4c5 我没有使用默认数据库,目前正在通过 .using('dbname') 进行手动路由。告诉我您需要哪些详细信息,我会为您提供相同的信息。另外,你还能告诉我,为什么表格对象不可见吗?谢谢!
  • 应该是get_queryset(self, request)能不能换个试试

标签: python django python-2.7 django-admin


【解决方案1】:

需要添加get_queryset函数

from django.contrib import admin

# Register your models here.
from .models import DestinationMap


class MultiDBModelAdmin(admin.ModelAdmin):
    # A handy constant for the name of the alternate database.
    using = 'supplierui'

    def save_model(self, request, obj, form, change):
        # Tell Django to save objects to the 'other' database.
        obj.save(using=self.using)

    def delete_model(self, request, obj):
        # Tell Django to delete objects from the 'other' database
        obj.delete(using=self.using)

    def get_queryset(self, request):
        # Tell Django to look for objects on the 'other' database.
        return super(MultiDBModelAdmin, self).get_queryset(request).using(self.using)

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        # Tell Django to populate ForeignKey widgets using a query
        # on the 'other' database.
        return super(MultiDBModelAdmin, self).formfield_for_foreignkey(db_field, request=request, using=self.using, **kwargs)

    def formfield_for_manytomany(self, db_field, request=None, **kwargs):
        # Tell Django to populate ManyToMany widgets using a query
        # on the 'other' database.
        return super(MultiDBModelAdmin, self).formfield_for_manytomany(db_field, request=request, using=self.using, **kwargs)



admin.site.register(DestinationMap, MultiDBModelAdmin)

【讨论】:

  • 不客气。
  • 我是否也必须进行更改才能添加/删除新对象?
  • 我不这么认为,因为你已经添加了 save_model 和 delete_model
  • 添加新对象时出现错误,“重复键值违反了唯一约束“supplierui_destinationmap_pkey””,因为它没有将模型保存在自动主键 id 的末尾。我怎样才能做到这一点
猜你喜欢
  • 2020-08-24
  • 2023-03-03
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2021-02-07
  • 2017-03-28
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多