NeD*_*iaz 3 python django django-admin inlines
我想覆盖get_form表格管理中的 以便按当前用户进行过滤。问题是我收到一个错误:
object has no attribute 'current_user'
Run Code Online (Sandbox Code Playgroud)
管理员.py
class InvoiceDetail(admin.TabularAdmin):
form = InvoiceDetailForm
model = fa_invoice_lines
def get_form(self, request, obj=None, **kwargs):
form = super(InvoiceDetail, self).get_form(request, obj, **kwargs)
form.current_user = request.user
return form
class Invoice(admin.ModelAdmin)
form = InvoiceForm
inlines = [InvoiceDetail,]
Run Code Online (Sandbox Code Playgroud)表格.py
class InvoiceDetailForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(InvoiceDetailForm, self).__init__(*args, **kwargs)
self.fields['item'].queryset = fa_items.objects.filter(tenant=self.current_user)
class Meta:
model = fa_invoice_lines
Run Code Online (Sandbox Code Playgroud)我在非内联中使用了相同的策略并且它有效似乎没有调用get_form
admin.TabularAdmin没有get_form方法。您定义的函数get_form永远不会被调用。
您可能想研究一下get_formset方法。
受文档的启发,我实现了以下解决方案:
class Invoice(admin.ModelAdmin)
form = InvoiceForm
inlines = [InvoiceDetail,]
def get_formsets_with_inlines(self, request, obj=None):
for inline in self.get_inline_instances(request, obj):
inline.form.current_user = request.user
yield inline.get_formset(request, obj), inline
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4702 次 |
| 最近记录: |