Existe uma maneira de definir quais os campos no modelo são editáveis ​​na aplicação de administração?

votos
3

Assumir o seguinte:

models.py

class Entry(models.Model):
    title = models.CharField(max_length=50)
    slug = models.CharField(max_length=50, unique=True)
    body = models.CharField(max_length=200)

admin.py

class EntryAdmin(admin.ModelAdmin):
    prepopulated_fields = {'slug':('title',)}

Eu quero a lesma para ser pré-preenchida pelo título, mas eu não quero que o usuário seja capaz de editá-lo a partir do administrador. Presumi que adicionar os campos = [] para o objeto administrador e não incluindo a bala teria funcionado, mas não deixaram. Eu também tentei configuração editável = False no modelo, mas que o trabalho também não precisamos (de facto, pára a página de renderização).

Pensamentos?

Publicado 29/09/2008 em 15:55
fonte usuário
Em outras línguas...                            


5 respostas

votos
4

Para este caso particular, você pode substituir o método salvar para slugify (é built-in método, olhar na fonte django) o título e armazená-lo em campo lesma. Também a partir daí você pode facilmente verificar se este lesma é realmente único e mudá-lo de alguma forma, se não é.

Veja este exemplo:

def save(self):
    from django.template.defaultfilters import slugify

    if not self.slug:
        self.slug = slugify(self.title)

    super(Your_Model_Name,self).save()
Respondeu 29/09/2008 em 16:47
fonte usuário

votos
0

Além de substituir savea fornecer o valor gerado você quiser, você também pode usar a excluir opção em sua ModelAdminclasse para impedir que o campo seja exibido na admin:

class EntryAdmin(admin.ModelAdmin):
    exclude = ('slug',)
Respondeu 29/09/2008 em 20:36
fonte usuário

votos
0

Este trecho dá-lhe uma AutoSlugField com exatamente o comportamento que você está procurando, e adicioná-lo ao seu modelo é um one-liner.

Respondeu 29/09/2008 em 20:20
fonte usuário

votos
0

Este trechos Django faz o que quiser, definindo um read-only Widget personalizado. Então você definir um editor personalizado para o campo que na verdade não permite qualquer edição.

Respondeu 29/09/2008 em 16:27
fonte usuário

votos
0

Eu não tenho certeza do que você está pedindo é possível. Sua melhor aposta é provavelmente para esconder a lesma do interface de administração completamente especificando seus fieldsets, e do que substituindo o método salvar para copiar a lesma do azulejo, e potencialmente slugifying-lo ...

Respondeu 29/09/2008 em 16:04
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more