Adicionando um widget no seu formfield, usando inlineformset_factory

Para começar com o pé direito aqui na Campus Party estou fazendo esse post com uma informação que pode ser bastante útil para outros.

O Problema

Estava usando inlineformset_factory para colocar varios arquivos de uplaod que estavam ligados a um model ai, mas o problema mesmo foi que eu queria que cada um dos ‘inlines’ tivesse um widget no campo de FileField.
Depois de muuuuito bater a cabeça, e de olhar a fundo o fonte do Django(graças a facilidade da IDE Eclipse como descrevi nesse post) eu descobri uma maneira de fazer isso sem ter que sair herdando e alterando tudo quanto é classe por aí.

Solução

Primeiramente você deve criar seu próprio método para o formfield_callback.
Nesse método você pega qual o formfield do campo passado no parâmetro e altera o widget do mesmo para o que você precisa, e em seguida retorna o formfield alterado. Vou mostrar o exemplo do meu caso, em que alterei o widget para usar o meu widget nos FileFields:

Em seguida na sua view onde você usa o seu inlineformset_factory você altera a chamada do método para usar o seu método como formfield_callback, ex:

E isso deve ser o suficiente.

Caso seja útil para mais alguém o widget que eu fiz retira o caminho completo do arquivo de um campo de upload e retira o link do mesmo, deixando apenas o nome do arquivo.
No meu caso era interessante o mesmo para não deixar claro para os usuários do sistema qual era a estruturação de pasta do meu sistema, e como não havia a necessidade do usuário reaver o arquivo enviado não era necessário nem o link nem o caminho completo para o mesmo(deixei apenas o nome do arquivo assim o usuário sabe qual o arquivo que ele enviou pelo nome). Segue o código do mesmo:

Isso é tudo, abraços!

About arruda

Adoro programar, descobrir novas frameworks ágeis e suas diversas aplicações.