我正在寻找一种在过滤的查询集的基础上使用filter_horizontal的方法.
我试图将它与自定义管理器一起使用:
在models.py中:
class AvailEquipManager(models.Manager):
def get_query_set(self):
return super(AvailEquipManager, self).get_query_set().filter(id=3)
class Equipment(models.Model):
description = models.CharField(max_length=50)
manufacturer = models.ForeignKey(Manufacturer)
[...]
objects = models.Manager()
avail = AvailEquipManager()
def __unicode__(self):
return u"%s" % (self.description)
Run Code Online (Sandbox Code Playgroud)
在admin.py中:
class SystemAdmin(admin.ModelAdmin):
filter_horizontal = ('equipment',) # this works but obviously shows all entries
#filter_horizontal = ('avail',) # this does not work
Run Code Online (Sandbox Code Playgroud)
所以问题是,我如何减少filter_horizontal的左侧只显示特定的项目?
我在这里读到了关于can_add_related的功能:https://code.djangoproject.com/ticket/9071
我尝试过这样使用它:
def get_form(self, request, obj=None, **kwargs):
self.fields['person'].can_add_related = False
return super(OperationAdmin, self).get_form(request, obj, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但这会引发TypeError,我不知道如何解决这个问题.
有人能指出我正确的方向吗?
谢谢.
我一直在考虑实施“对于一种组合来说只有一个条目可能为真”。
一个项目通过一个中间表有n个成员(警卫)。
我是否需要监督某些事情,或者我是否必须自己实施自定义验证?
要完成此操作,请参阅给定的模型:
class Project(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE)
shortname = models.CharField(_('shortname'), max_length=50)
description = models.TextField(_('description'), blank=True)
members = models.ManyToManyField(Guard, through='ProjectMembership')
class Meta:
unique_together = ['client', 'shortname']
class ProjectMembership(models.Model):
guard = models.ForeignKey(Guard, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
is_main = models.BooleanField(_('is main project'), default=False)
class Meta:
unique_together = ['guard', 'project']
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚这一点,也许我因为长期关注同样的东西而变得盲目......
我在 CSV 文件中有这样的行:
""BIN"",""Afg"",""SONIC/SONIC JET/"",1,8.9095,""Due to the dynamic nature of the exemptions granted to many operators, the Contract Price does not reflect V.A.T. / G.S.T., Mineral Oil Taxes, Federal Excise Taxes or other taxes to which an operator may be exempt. Please contact your salesperson or World Fuel Services if you require assistance in generating a fuel price estimate."",""N/A"",""01-NOV-2013"
Run Code Online (Sandbox Code Playgroud)
我正在尝试像这样导入:
data = csv.DictReader(open(newdatafile), delimiter=',', quoting=csv.QUOTE_NONNUMERIC)
data.fieldnames = [
'iata', 'country', 'fbo', 'quantity', 'price', 'remarks', 'special', 'validdate'
]
for row …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用模型中的属性作为 django admin (1.2) 中的字段。
这是我的代码的示例:
class Case(models.Model):
reference = models.CharField(_(u'Reference'), max_length=70)
client_read = models.BooleanField(default=0)
def __unicode__(self):
return self.case_id
@property
def case_id(self):
""" unique case ID """
number = (settings.CASE_ID_LENGTH - len(str(self.id))) * "0" + str(self.id)
return '%(year)s%(unique_id)s' % {
'year': self.case_date.strftime("%y"),
'month': self.case_date.strftime("%m"),
'unique_id': number}
Run Code Online (Sandbox Code Playgroud)
以及 admin.py 的部分:
class OrderAdmin(ReadOnlyAdminFields, admin.ModelAdmin):
[...]
search_fields = ('id','case','req_surname','req_forename','req_company')
Run Code Online (Sandbox Code Playgroud)
我可以将该字段称为“case”(如示例中所示),但这给了我一个TypeError:相关字段具有无效查找:icontains
当然,它以相关字段的方式工作:所以我可以使用case__id,然后我可以使用 id 作为搜索查询。但这对用户来说有点恼火,因为 caseid 显示不同。
有没有办法像显示的那样使用 case_id 作为搜索查询(年+月+id)?
我创建了一些代码来区分Django admin中的两个用户组,导致只读取所有字段或仅显示其中的一些字段,这些字段直接在ModelAdmin类中设置.
这里首先是代码:
class PersonAdmin(admin.ModelAdmin):
readonly_fields = ('created_at','created_by',)
def get_form(self, request, obj=None, **kwargs):
if obj: # we are in edit mode
if request.user.is_superuser:
self.readonly_fields = ()
else:
for group in request.user.groups.all():
if str(group) == 'readonlyuser':
allfields = tuple(obj._meta.get_all_field_names())
self.readonly_fields = allfields
return super(PersonAdmin, self).get_form(request, obj, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我在组之间划分并相应地设置字段.如果来自两个组的用户没有同时登录,一切正常!在"只读"用户登录后,adminuser也将只读取所有字段.
我的检查也提供了一个解决方案:如果我在for block中为adminuser添加了一个额外的if语句,一切都按预期工作.
if str(group) == 'adminuser':
self.readonly_fields = PersonAdmin.readonly_fields
Run Code Online (Sandbox Code Playgroud)
为什么那样以及那里发生了什么?
我没有进行特殊的缓存设置,它发生在开发服务器以及带有WSGI的Apache上.
根据我的理解,request.user.groups.all()应该返回当前登录用户所属的所有组.Django从哪里获得allfields(readonly),如果另一个用户在不同的IP和会话上匹配这个if块?