Как я могу дать `def formfield_for_manytomany` идентификатор редактируемого объекта - PullRequest
4 голосов
/ 07 марта 2011
class Report(models.Model):
    precursor = models.ManyToManyField(Precursor)

class ReportAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        ops_area = Report.objects.get(id=???????).ops_area
        print id
        print ops_area
        if db_field.name == "r_precursor":
            kwargs["queryset"] = Precursor.objects.filter(ops_area=ops_area)
            print kwargs
        return super(ReportAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

Как я могу дать def formfield_for_manytomany идентификатор редактируемого объекта?

1 Ответ

14 голосов
/ 07 марта 2011

Предполагая, что вы после редактирования экземпляра Report с помощью ReportAdmin, попробуйте следующее:

class ReportAdmin(admin.ModelAdmin):
    def get_object(self, request, object_id):
        # Hook obj for use in formfield_for_manytomany
        self.obj = super(ReportAdmin, self).get_object(request, object_id)
        print "Got object:", self.obj
        return self.obj

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "r_precursor" and getattr(self, 'obj', None):
            kwargs["queryset"] = Precursor.objects.filter(
                ops_area=self.obj.ops_area)
        return super(ReportAdmin, self).formfield_for_manytomany(
            db_field, request, **kwargs)
...