所以我有两个与外键相关的模型(表)。在管理中,编辑页面显示第一个模型(假设 ModelOne)以及第二个模型 ModelTwo (TabularInline) 的相关实例。
我想要的是在更改第二个模型时执行一些额外的操作。我可以用 ModelTwo 上的 post_save 信号来做到这一点。但是,仅当我从模型自己的编辑页面(即不在 ModelOne 的内联中)保存模型时,才会调用 post_save 信号。
有没有办法在 ModelTwo 的内联表单上附加 post_save 信号?
...作为一种解决方法,我向 ModelTwo 添加了一些自定义验证,无论它是否内联都会被调用),以调用我想要的方法。但是,此设置引起的问题是,如果我创建 ModelOne 的新实例并同时创建 ModelTwo 的实例,我将无法访问关联两个表的新实例的主键(外键)(因为它尚未保存)。主键是我需要的东西。
我还尝试直接向 ModelOne 添加 post_save 信号(以便我可以获得新实例的 PK),但 post_save 信号似乎没有传递 ModelTwo 的数据(为什么要这样做,无论如何?)
那么解决这个问题的方法是什么?内联模型会发出信号吗?有没有办法在保存之前访问新实例的PK?
有没有办法阻止用户在注册后更改他的密码/电子邮件/用户名?
在这里发疯......从外壳内,我可以这样做:
product.tags.add("a_new_tag")
Run Code Online (Sandbox Code Playgroud)
标签被添加到数据库中,标签与产品的关联工作正常。(即当我做Product.objects.filter(tags__name__in=["a_new_tag"]相应的产品时吐出来)
我需要做的是在处理表单时在管理中添加一些标签。
这是我的表单代码(阅读第 4 行和第 5 行中的注释):
class ProductForm(ModelForm):
def save(self, commit=True):
product = super(ProductForm, self).save(commit=False)
product.type="New Type to Confirm Info is being Saved Correctly" //this is saved to the product.
product.tags.add('a_new_tag_1') //the tag is saved to the taggit db, but the association with the product isn't kept.
product.save()
self.save_m2m()
return m
Run Code Online (Sandbox Code Playgroud)
我尝试在管理类中进行保存,但这也不起作用:
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
def save_model(self, request, obj, form, change):
obj.type="new_type" //this works
obj.tags.add("a_new_tag_2") //tag association not saved
obj.save()
form.save_m2m()
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?提前致谢!
我正在尝试为模型编写一个动态表单,允许具有不同权限的用户做不同的事情。我希望下面的代码能够正常运行,以便非超级用户无法编辑“商家”块中的任何字段。
class CategoryModelAdmin(LWModelAdmin):
fieldsets = (
('Merchant', {'fields': ('merchant',) }),
('Category', { 'fields': ('name', 'parent',) }),
)
def get_form(self,request,obj=None, **kwargs):
if request.user.is_superuser:
self.exclude = []
else:
self.exclude = ['Merchant']
return super(CategoryModelAdmin,self).get_form(request, obj=None, **kwargs)
Run Code Online (Sandbox Code Playgroud)
虽然我可以通过下面的代码实现这种效果,但我真的在寻找“正确”的方法来做到这一点,感觉使用 exclude 是可行的方法,但无论如何我似乎都无法做到我试试。
class CategoryModelAdmin(LWModelAdmin):
declared_fieldsets = None
admin_fieldsets = (
(None, {'fields': ('merchant',) }),
('Category', { 'fields': ('name', 'parent',) }),
)
restricted_fieldsets = (
('Category', { 'fields': ('name', 'parent',) }),
)
def get_fieldsets(self, request, obj=None):
if request.user.is_superuser:
fieldsets = self.admin_fieldsets
else:
fieldsets = self.restricted_fieldsets
return LWModelAdmin.fieldsets …Run Code Online (Sandbox Code Playgroud) 我在 magento 中使用网格来显示表格的内容。该表有一个位置列,我正在根据其中的值对内容进行排序。
此位置列在网格中显示为类型输入:
$this->addColumn('position', array(
'header' => Mage::helper('postcard')->__('Position'),
'align' =>'left',
'index' => 'position',
'type' => 'input',
'width' => '100',
'sortable' => true,
));
Run Code Online (Sandbox Code Playgroud)
如何为所有行提交这些列的值?我尝试使用批量操作,但只提交所选行的 ID 而不是位置列。有没有其他方法可以做到这一点?
设想。
具有地址列表的简单数据库
addressID
FirstName
LastName
City
PostCode
CountyID
ZoneID
Run Code Online (Sandbox Code Playgroud)
问题是默认情况下,该表最后没有创建或时间戳列。但是,我可以通过我的 Nginx SSH Ubuntu 11 设置完全访问 MySQL - 我也可以登录到 root phpMyAdmin。
例如,我可以检查特定条目的制作时间、修改时间等吗?
当我尝试使用以下命令访问管理控制台时
http://localhost:4848
Run Code Online (Sandbox Code Playgroud)
它说管理控制台正在加载,但不会再继续。如果我按照建议刷新页面,我会收到 HTTP 404。
Stack Overflow 上还有其他几个已回答的类似问题,但没有一个答案有帮助。因此,我将全局日志记录级别设置为 FINEST 并查看了 server.log。
我得到的第一个也是最突出的例外是:
[#|2013-05-07T11:04:52.187+0200|FINE|glassfish3.1.2|com.sun.enterprise.v3.admin.adapter.AdminConsoleAdapter|_ThreadID=81;_ThreadName=Thread-2;ClassName=com.sun.enterprise.v3.admin.adapter.AdminConsoleAdapter;MethodName=initRest;|java.io.IOException: Server returned HTTP response code: 401 for URL: http://0.0.0.0:4848/management/domain
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1625)
at com.sun.enterprise.v3.admin.adapter.AdminConsoleAdapter.initRest(AdminConsoleAdapter.java:557)
at com.sun.enterprise.v3.admin.adapter.AdminConsoleAdapter$1.run(AdminConsoleAdapter.java:372)
Run Code Online (Sandbox Code Playgroud)
(这里是从启动 glassfish 到访问管理控制台的完整日志)
这发生在我的开发机器(Windows XP)上。尝试了几次重新安装到不同的位置。我的 JVM 来自 JDK 7u21。
在我的其他具有类似配置的开发机器(Ubuntu 13.04)上不会发生这种情况。除了操作系统之外,主要区别在于代理配置。它被设置为所有协议的代理,端口 8080,除了 localhost 之外。
我自己实在是没有答案……
编辑
其他奇怪的行为。有时(glassfish 每隔一秒重新启动一次)可以通过以下方式访问登录管理控制台
http://127.0.0.1:4848/j_security_check
Run Code Online (Sandbox Code Playgroud)
然后我可以登录并编辑其中的任何设置。当我注销时,我收到 HTTP 500:
javax.servlet.ServletException: java.lang.reflect.InvocationTargetException while attempting to process a 'beforeCreate' event for 'sun_html53'.
root cause
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException while attempting to process a 'beforeCreate' event for 'sun_html53'.
root cause
java.lang.reflect.InvocationTargetException
root …Run Code Online (Sandbox Code Playgroud) 我想在管理后端仅向超级用户显示模型,而不向员工用户显示模型,这可能吗?
例子:
check which user is logged
if superuser
admin.site.register(model_1)
admin.site.register(model_2)
admin.site.register(model_3)
...
if staff_user
admin.site.register(model_1) #show only one model in the admin
Run Code Online (Sandbox Code Playgroud)
谢谢
我想在管理站点中完全隐藏来自第三方模块 ( otherapp) 的模型。
我admin.site.unregister(ModelToHide)输入了我的一个应用程序的管理员 ( myapp),但它会导致NotRegistered每个页面上出现错误。问题是之前myapp.admin加载的。 otherapp.admin
我尝试更改顺序INSTALLED_APPS,使其otherapp出现在之前myapp,但没有帮助,Django 以相反的顺序加载它们。我在其中一篇评论中读到,根据 Django 的书,顺序INSTALLED_APPS并不重要。
实际上,我创建这个问题只是为了分享我让它为我工作的方式,因为我花了一些时间来找出解决方案。希望这对某人有帮助。
我希望模型有不同的导出格式,因此其中一种格式包含其他格式中不存在的附加元数据。
我可以为这两种导出格式创建一个 ModelResource 子类,但我想允许用户从管理界面中选择它们。
它是这样的:
class IngredientColourRelation(models.Model):
ingredient = models.CharField()
colour_label = models.CharField()
metadata = models.CharField()
class IngredientColourLabelResource(resources.ModelResource):
"""Ingredient Resource class for importing and exporting."""
ingredient = resources.Field()
colour_label = resources.Field()
class Meta:
"""Meta class"""
model = IngredientColourRelation
fields = ('id', 'ingredient', 'colour_label',)
export_order = ('id', 'ingredient', 'colour_label',)
Run Code Online (Sandbox Code Playgroud)
另一个资源是这样的:
class MetadataIngredientColourLabelResource(resources.ModelResource):
"""Ingredient Resource class for importing and exporting."""
ingredient = resources.Field()
colour_label = resources.Field()
metadata = resources.Field()
class Meta:
"""Meta class"""
model = IngredientColourRelation
fields = ('id', 'ingredient', 'colour_label', 'metadata',) …Run Code Online (Sandbox Code Playgroud)