InvoiceAdmin モデルで ActionAdminInline として使用される ActionAdmin モデルがあります。
InvoiceModel では、save_formset をオーバーライドして、いくつかの値を自動設定します。各アクション インスタンスの値を設定することは問題ありませんが、親の請求書のフィールドを取得できませんでした。
私はそれがselfまたはself.project.pkでなければならないと思っていました。また、他のスレッドで見られるform.project.pk で取得しようとしました。
私が得るエラーは、InvoiceAdmin にそのようなフィールドがないことに関するものです。それは私には理にかなっています。self は InvoiceAdmin オブジェクトであり、Invoice オブジェクトではありません。Action instance.invoice と instance.project を設定するには、Invoice オブジェクト フィールドを取得する必要があったと思います。
この親オブジェクトの値を取得する方法を誰かが知っていますか???
次のようになります。
class ActionAdmin(admin.ModelAdmin):
...
class ActionInlineForm(ModelForm):
class Meta:
model = Action
fields = ['name','tax', 'price','duration_extern',]
class ActionInline(admin.TabularInline):
model = Action
form = ActionInlineForm
extra = 0
ordering = ('date_finished',)
can_delete=False
readonly_fields = ['non_editable_date_finished','non_editable_duration','get_remove_invoice_pos_link']
class InvoiceAdmin(admin.ModelAdmin):
...
...
...
inlines = [ActionInline,]
...
...
...
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
usr = User.objects.get(id=7)
try:
instance.created_by = instance.created_by
except:
instance.created_by = usr
try:
instance.owner = instance.owner
except:
instance.owner = usr
instance.modified_by = usr
try:
instance.date_created = instance.date_created
except:
instance.date_created = date.today
instance.date_modified = date.today:
### MAN, This WORKS NOW ###
try:
instance.project = instance.project
except:
pr = Project.objects.get(id=instance.invoice.project.id)
instance.project = pr
actstat = ActionStatus.objects.get(id=2)
instance.actionstatus = actstat
try:
instance.actioncategory = instance.actioncategory
except:
cat = ActionCategory.objects.get(id=9)
instance.actioncategory = cat
instance.done = True
instance.billed = True
instance.save()
formset.save_m2m()
これはエラーメッセージです:
AttributeError at /workflow/invoice/21/
...
Exception Type: AttributeError
Exception Value: 'InvoiceAdmin' object has no attribute 'id'
...
Traceback
form <django.forms.models.InvoiceForm object at 0x7f7f7421de10>
instances [<Action: aaaaa>]
self <workflow.admin.InvoiceAdmin object at 0x7f7f7421dad0>
セルフ オブジェクトが InvoiveAdmin で Invoice ではないことは問題ですか? インスタンス オブジェクトは Action であり、ActionAdmin ではありませんか?!