所以我有两个与外键相关的模型(表)。在管理中,编辑页面显示第一个模型(假设 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) 如果这个问题已经得到解答,我很抱歉,但我无法在其他任何地方找到它.
在我的django项目中,我有一些外键字段,它们有可供选择的选项.foreignkey字段的django下拉默认小部件很难找到我想要的那个.
我已经越过了filter_horizontal管理选项,它为文本搜索字段和两个选择器的多个字段带来了很好的选择功能.
我想知道是否有django内置选项,或者你是否有人找到了一个解决方案,允许我"动态"搜索外键字段,如"filter_horizontal"中指定的多个字段一样
提前致谢.
我在 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。
例如,我可以检查特定条目的制作时间、修改时间等吗?
我试图隐藏部分视图,具体取决于用户角色.
所以,假设我只希望管理员能够销毁产品.除了控制器中用于防止常规用户销毁记录的代码外,我还会在视图中执行以下操作:
<% if current_user.admin? %>
<%= link_to 'Delete', product, method: :delete %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
前面的代码有效,但它容易出现遗漏错误,这可能导致普通用户看到不允许执行的操作的链接.
此外,如果我稍后决定新角色(例如"主持人")可以删除产品,我将不得不找到显示删除链接的视图并添加允许主持人查看它的逻辑.
如果有许多模型只能由管理员用户删除(例如推广,用户),所有ifs的维护将非常具有挑战性.
有没有更好的方法呢?也许使用帮手,或类似的东西?我正在寻找像这样的东西:
<%= destroy_link 'Delete', product %> # Only admins can see it
<%= edit_link 'Edit', promotion %> # Again, only admins see this link
<%= show_link 'Show', comment %> # Everyone sees this one
Run Code Online (Sandbox Code Playgroud)
我发现这两个问题与我的相似,但没有人回答我的问题:
我有以下django admin exceprt:
class TagAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
list_display = ['title', 'total_videos', 'total_active_videos', 'weight', 'status']
search_fields = ['title']
list_filter = ['status']
ordering = ['-weight']
def queryset(self, request):
return Tag.objects.annotate(total_videos_order=Count('video'))
def total_videos(self, obj):
return obj.total_videos_order
total_videos.admin_order_field = 'total_videos_order'
def total_active_videos(self, obj):
return u'%s' % Video.objects.filter(tags=obj, status=Video.STATUS_ACTIVE).count()
Run Code Online (Sandbox Code Playgroud)
现在一切正常,total_videos和total_active_videos都显示正确的信息.如果单击表标题,total_videos也是可排序的.但是,如果我尝试将代码更改为:
ordering = ['total_videos_order']
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
TagAdmin.ordering [0]'指的是模型'videos.Tag'中缺少的字段'total_videos_order'.
如果它只是"total_videos"相同.作为一种解决方法,我可以忽略它,只需点击标题,但它困扰我的原因,如果通过单击默认顺序排序无法设置,当字段显然存在?有什么想法吗?
问题的第二部分是否可以在过滤字段"total_active_videos"上添加排序.根据我的理解,它不可能用条件注释,因此它不能像"total_videos"那样完成,但还有其他解决方案吗?
谢谢!
我的MongoDB托管在compose.io上,名为ScroungeBA.我尝试创建一个具有一些内置角色的用户,这些角色由纪录片仅在admin数据库中工作:
MongoDB仅在管理数据库上提供所有其他内置角色
所以我的问题是:那个admin db是关于什么的?它是始终存在的标准数据库吗?
此外我遇到麻烦(使用MongoDB shell版本:3.0.5):
$ use admin
switched to db admin
$ db.auth("user", "secret")
Error: 18 Authentication failed.
Run Code Online (Sandbox Code Playgroud)
我想我的用户确实存在于ScroungeBA数据库中但不存在于admin数据库中?我如何在admin db中创建用户
db.createUser({user:"hello", pwd:"world", roles:[{role: "userAdmin", db: "admin"}]})
Run Code Online (Sandbox Code Playgroud)
导致错误:
Error: couldn't add user: not authorized on admin to execute command { createUser: "hello", pwd: "xxx", roles: [ { role: "userAdmin", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } }
at Error (<anonymous>)
at DB.createUser (src/mongo/shell/db.js:1101:11)
at (shell):1:4 at src/mongo/shell/db.js:1101
Run Code Online (Sandbox Code Playgroud)