这个问题可能类似于这一个,但它不是...
我有一个模型结构,如:
class Customer(models.Model):
....
class CustomerCompany(models.Model):
customer = models.ForeignKey(Customer)
type = models.SmallIntegerField(....)
Run Code Online (Sandbox Code Playgroud)
我正在使用InlineModels,有两种类型CustomerCampany.type.所以我为CustomerCompany和ov覆盖定义了两个不同的内联InlineModelAdmin.queryset
class CustomerAdmin(admin.ModelAdmin):
inlines=[CustomerCompanyType1Inline, CustomerCompanyType2Inline]
class CustomerCompanyType1Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType1Inline, self).queryset(request).filter(type=1)
class CustomerCompanyType2Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType2Inline, self).queryset(request).filter(type=2)
Run Code Online (Sandbox Code Playgroud)
所有这些都是好的,好了这里,但是对于添加新记录InlineModelAdmin,我仍然需要显示设备type的领域CustomerCompany上AdminForm,因为我不能覆盖save的方法InlineModelAdmin ,如:
class CustomerCompanyType2Inline(admin.TabularInline):
model = CustomerCompany
def queryset(self, request):
return super(CustomerCompanyType2Inline, self).queryset(request).filter(type=2)
#Following override do not work
def save_model(self, …Run Code Online (Sandbox Code Playgroud) 以下是我的管理视图:
@admin.register(AuditStashAwsMasterPolicies)
class AuditPoliciesAdmin(reversion.VersionAdmin):
exclude = ['source_policy_path', 'source_state', 'target_state']
readonly_fields = ['comparison_date', 'source', 'source_policy_name', 'target', 'target_policy_name',
'target_policy_path', 'policy_difference']
def policy_difference(self, instance):
return drift.compare_two_policies(instance.source, instance.source_policy_name, instance.source_policy_path,
instance.target, instance.target_policy_name, instance.target_policy_path)
Run Code Online (Sandbox Code Playgroud)
我想要做的是在我的“policy_difference”只读字段中添加一些帮助文本。从帮助文档中,我只能通过修改模型并在那里创建一个带有帮助文本的只读字段来做到这一点。
问题是我没有在“policy_difference”字段中存储任何值,我只是即时生成它,并希望避免将其存储在模型中。
有什么方法可以在不更改模型 AuditStashAwsMasterPolicies 的情况下将文本添加到“policy_difference”只读字段?
我正在尝试为特定模型配置Django管理绑定,以便我可以快速过滤特定字段的确切值.我知道我可以手动篡改GET参数来执行此操作:
?fieldname__exact=foobar
Run Code Online (Sandbox Code Playgroud)
我似乎无法做的是,侧边栏显示一个小表单,我可以输入此值.我知道我可以添加fieldname到list_filter,但没有规模远远超出了几十唯一值.我稍微研究了django-advanced-filters,但它似乎与Django 1.11不兼容.
如何在Django管理员中实现特定字段的精确搜索?
我有这两个模型和 modeladmin。在可用主机用户列表中添加新主机时,仅显示未分配给其他主机的主机用户。问题是,如果我编辑一个已经创建的主机,它的实际主机用户 ID 也会被过滤,所以我想要做的是排除当前分配的主机用户 ID。如何在从主机用户字段中排除当前 ID 中指定?
我需要的语句写在 * 之间
提前致谢
模型.py
class HostUser(models.Model):
name = models.CharField(max_length=200)
{..More Data..}
class Host(models.Model):
{..More Data..}
hostuser = models.ForeignKey(HostUser, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
管理员.py
class HostAdmin(admin.ModelAdmin):
{..More Data..}
def render_change_form(self, request, context, *args, **kwargs):
list_names = Host.objects.values_list('hostuser__id', flat=True).exclude(hostuser__id=None).exclude(hostuser__id=**ACTUAL HOSTUSER_ID**)
list_names = [int(ids) for ids in list_names]
context['adminform'].form.fields['hostuser'].queryset = HostUser.objects.exclude(id__in=list_names)
return super(HostAdmin, self).render_change_form(request, context, args, kwargs)
Run Code Online (Sandbox Code Playgroud) 最终,我想基于......包括/排除某些javascript文件.简单地定义Media类本身是行不通的,因为它只被评估一次.
我知道我可以通过制作自定义管理模板来实现这一点,但我想知道是否有一种简单的方法可以通过使媒体属性动态化来实现.
这是我到目前为止:
from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
model = MyModel
...
@property
def media(self):
media = super(MyModelAdmin, self).media
if whatever_condition_I_want:
# somehow add "my/js/file3.js"
return media
class Media:
css = {
"all": (
"my/css/file1.css",
"my/css/file2.css",
)
}
js = (
"my/js/file1.js",
"my/js/file2.js",
)
Run Code Online (Sandbox Code Playgroud)
这几乎可行,但我发现调用super(MyModelAdmin, self).media忽略了我当前类的媒体定义.在探索时,我发现这是因为父类的媒体属性被django.forms.widgets.media_property(via MediaDefiningClass)包裹,因为我正在覆盖媒体,我的媒体属性没有被包装.我尝试手动包装它:
from django.forms import media_property
MyModelAdmin.media = media_property(MyModelAdmin)
Run Code Online (Sandbox Code Playgroud)
但是media_property无法导入.
如何让它包括我的静态媒体和动态媒体,以及如何以django满意的方式添加我的动态媒体?
这是我的admin.py:
class TransactionInfoAdmin(admin.ModelAdmin):
search_fields=['transactionId','subscriptionInfo__customerNumber']
save_on_top = False
def has_add_permission(self,request):
return False
def has_delete_permission(self, request, obj=None):
return False
def get_readonly_fields(self, request, obj=None):
if obj:
return self.readonly_fields + ('subscriptionInfo','transactionId','authorizationId','responseCode','operation','batchNumber','merchantId')
return self.readonly_fields
def save_model(self, request, obj, form, change):
#SUCCESS ACTIONS
obj.subscriptionInfo.paid = 1
obj.save()
pass
Run Code Online (Sandbox Code Playgroud)
当我保存obj.subscriptionInfo.paid = 1它不更新数据行时,任何想法为什么?
注意:subscriptionInfo是上述模型TransactionInfo中的外键.
--------------------------更新----------------------- ---
我的model.py
class SubscriptionInfo(models.Model):
subscriptionId = models.CharField(max_length=50)
customerNumber = models.IntegerField()
subscriptionType = models.CharField(max_length=50, default="basic")
currency = models.CharField(max_length=50, default="NOK")
paid = models.IntegerField(default=0)
class Meta:
verbose_name = "Subscription Information"
verbose_name_plural = "Subscription Information" …Run Code Online (Sandbox Code Playgroud) 我想在 Django 管理 list_display 页面中添加可编辑的 Many2Many 字段。模型结构如下,
class Genre(models.Model):
name = models.CharField(max_length=250, unique=True)
class Movie(models.Model):
name = models.CharField(max_length=250)
genre = models.ManyToManyField(Genre)
Run Code Online (Sandbox Code Playgroud)
我尝试过,
class MovieAdmin(admin.ModelAdmin):
list_display = ['name', 'genre']
list_editable = ['genre']
Run Code Online (Sandbox Code Playgroud)
上面抛出一个错误。
我有一个Person模型,它ForeignKey本身有一个字段,称为mother. 当用户进入“添加”管理表单时,我想为 定义一个初始值mother,以防有GET('mother')参数,或者将其留空,以防万一。
我实际上有两个问题:
ModelAdmin?ForeignKey字段的初始值?在models.py中:
class Person(models.Model):
name=models.CharField()
mother=models.ForeignKey('self')
Run Code Online (Sandbox Code Playgroud)
在 admin.py 中:
class PersonAdminForm(forms.ModelForm):
class Meta:
model = Person
class PersonAdmin(admin.ModelAdmin):
mother = request.GET.get('mother','') #don`t know how to access request
if mother != '':
form = PersonAdminForm
form.initial={'mother':Person.objects.get(id=mother)}
Run Code Online (Sandbox Code Playgroud)
嗯,这是行不通的。即使我只是尝试定义一个硬编码的初始值,它也不起作用。
我究竟做错了什么?
PS.:当然,我可能问错了问题,所以我感谢任何解决问题的帮助。
django django-models django-forms django-admin django-modeladmin
我想使用django管理界面来显示模型中的数据聚合.例如:模型有以下字段[员工姓名,工资,月份]我希望聚合表包含字段[month,total_salary_paid,cumulative_of_month_salaries_paid].我该怎么做呢 ??我搜索过互联网但没有找到任何办法.任何参考或指导都会有所帮助
django django-models django-admin django-modeladmin django-admin-tools
ModelAdmin我的gradeScalesSettings模型有一个子类:
@admin.register(gradeScalesSetting)
class gradeScalesSettingAdmin(admin.ModelAdmin):
list_display = ('configuration_select', 'NumberOfGrades', 'Rounding','Precision', 'Status',)
change_list_template = 'admin/Homepage/view.html'
Run Code Online (Sandbox Code Playgroud)
单击“成绩等级设置”后:
如何将它连接到我的 views.py?这是我想在我的 views.py 中编码的内容:
def gradescales(request):
gradeScalesSettings = gradeScalesSetting.objects.all()
configurations = configuration.objects.all()
rounding = gradeScalesSetting.objects.all().values_list('Rounding', flat=True).distinct()
print(rounding)
return render(request, 'Homepage/gradescale.html', {"rounding": rounding,"gradeScalesSetting":gradeScalesSettings,"configurations":configurations})
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时:
@admin.register(gradeScalesSetting)
class gradeScalesSettingAdmin(admin.ModelAdmin):
def new_NumberOfGrades(self, obj):
if obj.NumberOfGrades == 'Grade Scale Settings':
return '<a href="view.html" </a>' # this url will redirect to your
Run Code Online (Sandbox Code Playgroud)
在我的ModelAdmin子类中:
list_display = ('configuration_select', 'new_NumberOfGrades', 'Rounding','Precision', 'Status',)
Run Code Online (Sandbox Code Playgroud)
有没有办法将它连接到我的views.py?
这是我想在 view.html 中显示的内容: …
django ×10
django-admin ×8
python ×4
django-forms ×2
django-1.5 ×1
django-1.7 ×1
javascript ×1
overriding ×1
python-2.7 ×1