Mam*_*aac 25 python django django-admin
这个让我现在疯了.之前没有发生过(因为客户需要它,我甚至得到了用户手册的截图).
我首先在生产服务器上注意到它然后我检查并且也发生在Django附带的开发服务器中.该模型出现在django管理员的主页上,我可以点击它,它将显示销售点列表.每当我想编辑现有实例或创建新实例时,问题就出现了.
我只需点击链接(或将其放在栏上)它就会挂起.
class PointOfSaleAdmin(admin.ModelAdmin):
list_display = ('id','business', 'user', 'zipcode', 'address','date_registered')
list_filter = ('business',)
filter_horizontal = ('services',)
admin.site.register(models.PointOfSale, PointOfSaleAdmin)
Run Code Online (Sandbox Code Playgroud)
这是模型的注册.所有模型都在管理应用程序中注册,用户测试这是超级用户.该模型是:
class PointOfSale(models.Model):
user = models.ForeignKey(User)
zipcode = models.ForeignKey(Zipcode)
business = models.ForeignKey(Business)
services = models.ManyToManyField(Service,
verbose_name='available services')
date_registered = models.DateField(auto_now_add=True)
address = models.CharField(max_length=300)
Run Code Online (Sandbox Code Playgroud)
加上一些不太重要的方法.另外,在此之前的最后一次我测试了管理员是在我创建所有这些方法后,所以它应该无关紧要.
管理员很少需要访问此页面.通常它只是列出PoS,但它仍然困扰我.知道为什么它可以挂?所有其他型号都运行得很好.
这在Django 1.2.5和1.3上都有发生
编辑:
我修改了超时限制.它工作正常,但不知何故,实际发生它需要几分钟.所以,背景中的某些东西需要很长时间.我不明白为什么它只发生在这个模型上,它发生在不同的环境中(和小数据集)
我差点想拍打自己.我没有睡这么久的错.
问题是邮政编码列表相当大(数十万),外键字段作为html选择标记加载,这意味着它加载每一个条目.这是一个简单的数据有多少的问题.
现在我想知道如何控制外键在admin中的显示方式.任何人都可以帮忙吗?
spu*_*lec 28
在admin.py文件中,在相应的管理类下,设置
raw_id_fields = ('zipcode',)
Run Code Online (Sandbox Code Playgroud)
这将显示邮政编码的PK而不是下拉列表.
您是否有理由设置zipcode作为自己的模型,而不是使用CharField或实际的zipcode modelfield?
我只是想补充一点,这里的另一个选项就是创建一个read_only_fields列表.如果与具有大量选择的模型(在我的情况下是大量用户和讨论线程之间的rel表编目标记)存在关系,则您不需要编辑该字段.您可以将其添加到read_only_fields列表中,只打印值而不是选项.
class FlaggedCommentsAdmin(ModelAdmin):
list_display = ('user', 'discussion', 'flagged_on')
readonly_fields = ('user', 'discussion')
Run Code Online (Sandbox Code Playgroud)
对于仍然登陆此页面的人:正如 Mamsaac 在他的原始帖子中指出的那样,超时发生是因为 django 尝试将 a 的所有实例加载ForeignKey到 html-select 中。Django 2 允许您添加一个自动完成字段,该字段允许您异步搜索来ForeignKey处理此问题。在你admin.py做这样的事情:
from django.contrib import admin
from .models import Parent, Child
@admin.register(Parent)
class ParentAdmin(admin.ModelAdmin):
# tell admin to autocomplete-select the "Parent"-field 'children'
autocomplete_fields = ['children']
@admin.register(Child)
class ChildAdmin(admin.ModelAdmin):
# when using an autocomplete to find a child, search in the field 'name'
search_fields = ['name']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5396 次 |
| 最近记录: |