Django - переопределенный метод Inline Object не вызывается - PullRequest
1 голос
/ 17 ноября 2010
class ServiceInline(admin.TabularInline):
    model = Service

class PlanAdmin(admin.ModelAdmin):
    inlines = [ServiceInline]

class ServiceAdmin(admin.ModelAdmin):   
    def save_model(self, request, obj, form, change):
        instance = form.save(commit = False)
        if not instance.created_at and not instance.modified_at:
           instance.created_by = request.user
        instance.modified_by = request.user
        instance.save()        
        form.save_m2m()
        return instance

Я переопределил метод save_model(self, request, obj, form, change): класса Service в его классе администратора.Но этот переопределенный метод не вызывается, когда объект Service добавляется через Inline (страница плана).Какие-либо предложения?

Ответы [ 3 ]

0 голосов
/ 17 ноября 2010

Это не ответ, специфичный для вашего варианта использования, но вы можете обойти вашу проблему, используя сигнал post_save: http://docs.djangoproject.com/en/1.2/ref/signals/#post-save

0 голосов
/ 22 ноября 2010

Я думаю, что вы действительно хотите сделать, это переместить этот метод save_model в класс ServiceInline.ServiceInline, в данном случае, является вашим классом Admin для Сервиса.

0 голосов
/ 17 ноября 2010

Вместо использования функции save_model в админке, которая, я думаю, не сработает, как насчет следующего:

class PlanAdmin(admin.ModelAdmin):
    # ...
    def save_model(self, request, obj, form, change):
        instance = form.save(commit=False)
        instance.last_updated_by = request.user
        instance.save()

class Service(models.Model):
    # ...
    created_by = models.ForeignKey(User, blank=True)

    def save(self, *args, **kwargs):
        self.created_by = self.plan.last_updated_by
        super(Service, self).save(*args, **kwargs)
...