我知道,问过这个问题,但我不清楚。
我把所有字段都放在了“只读字段”字段中。 Essai_TemperatureInline
。
我想在管理员中为当前用户创建的记录添加新的内联。
如果我想添加新记录怎么办?
class Essai_TemperatureInline(admin.TabularInline):
model = Essai_Temperature
extra = 5
ordering = ('choix__name', 'choix__lapropriete',)
def get_readonly_fields(self, request, obj=None):
if request.user.is_superuser == False:
notBelongToMe = Material.objects.exclude(user=request.user)
jj = 0
if obj:
while jj < len(notBelongToMe):
if notBelongToMe[jj] == obj:
return self.readonly_fields + (
'name',
'nature_unit',
'choix',
'valT',
'val10',
'val_ref',
)
jj += 1
return self.readonly_fields
class MaterialAdmin(admin.ModelAdmin):
inlines = (MediaInline, UniteProperty2Inline, Essai_TemperatureInline)
答案 0 :(得分:3)
不幸的是,你做不到。至少不是很好的方式,通过Python,如你所知how to do it with regular ModelAdmin。这是管理员中的一个错误,记录在Ticket #15602
中您可以做的是使用JavaScript。使用此选择器:
.inline-group tr.has_original
has_original
类应用于表示已保存模型实例的每个内联。
所以,在Essai_TemperatureInline
类中,让所有字段都可编辑(非readonly),然后使用JS(jQuery,我猜)将一些字段只读:
django.jQuery('.inline-group tr.has_original #id_somefield').attr('readonly', 'readonly');
请参阅The Documentation,了解如何将自己的JS添加到管理页面。基本上是:
class ArticleAdmin(admin.ModelAdmin):
class Media:
css = {
"all": ("my_styles.css",)
}
js = ("my_code.js",)
使用Firebug或类似的浏览器工具显然很容易被欺骗。因此,请务必在必要时考虑这一点,并进行一些检查,可能是formset.clean()
答案 1 :(得分:0)