Por que meu campo "data" não aparece no sistema de administração?
No meu arquivo admin.py eu tenho
from django.contrib import admin
from glasses.players.models import *
admin.site.register(Rating)
e o modelo de avaliação tem um campo chamado "data" que se parece com este
date = models.DateTimeField(editable=True, auto_now_add=True)
No entanto, dentro do sistema de administração, o campo não mostra, embora editable
esteja definido como True
.
Alguém tem alguma ideia?
fonte
auto_now_add
por meio do administrador depois que a entrada for criada?Se você realmente deseja ver a data no painel de administração, pode adicionar
readonly_fields
em admin.py :class RatingAdmin(admin.ModelAdmin): readonly_fields = ('date',) admin.site.register(Rating,RatingAdmin)
Qualquer campo que você especificar será adicionado por último, após os campos editáveis. Para controlar o pedido, você pode usar as
fields
opções.Informações adicionais estão disponíveis nos documentos do Django .
fonte
fields
você também terá que colocar seu campo nisso, então você precisaria delereadonly_fields
e,fields
caso contrário, o campo não apareceria.fieldsets
, apenas encontrei esse problema hoje.auto_now_add=True
no Django 1.9. Uma (espécie de) solução alternativa é adicioná-los àlist_display
tupla. Editar: Funcionará se você também adicionar seu campofields
como @BjornTipling mencionado.Hack principal:
Se você realmente precisa fazer isso (como eu), você sempre pode contornar isso definindo imediatamente o campo como "editável", definindo o campo da seguinte maneira:
class Point(models.Model): mystamp=models.DateTimeField("When Created",auto_now_add=True) mystamp.editable=True
Isso tornará o campo editável, para que você possa realmente alterá-lo. Parece funcionar bem, pelo menos com o mecanismo de apoio do mysql. Não posso dizer com certeza se outros armazenamentos de apoio tornariam esses dados imutáveis no banco de dados e, portanto, causariam um problema quando a edição for tentada, então use com cuidado .
fonte
Dependendo de suas necessidades específicas e de quaisquer nuances na diferença de comportamento, você pode fazer o seguinte:
from django.utils.timezone import now class MyModel(models.Model): date = models.DateTimeField(default=now)
O campo padrão pode ser usado desta forma: https://docs.djangoproject.com/en/dev/ref/models/fields/#default
The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.
Isso não define editável para
False
fonte
from django.utils.timezone import now
vez dedatetime.now
, mas isso parece promissor.Pode ter a ver com o fato de auto_now_add ser verdadeiro. Talvez em vez desse parâmetro para capturar a data na adição, você possa substituir o método de salvamento do modelo para inserir a data e hora quando o id é nulo.
class Rating(models.Model): .... def save(self, *args, **kwargs) if not self.id: self.date = datetime.datetime.now()
fonte
auto_now
não seja usado eeditable=False
. +1Se você deseja que qualquer campo seja visível na lista de todas as suas entradas (quando você clica em um modelo na equipe de administração) e não quando você abre essa entrada em particular, então -
class RatingAdmin(admin.ModelAdmin): list_display = ('name', 'date') admin.site.register(Rating, RatingAdmin)
'nome' sendo o seu campo principal ou qualquer outro campo que você deseja exibir no painel de administração.
Desta forma, você pode especificar todas as colunas que deseja ver.
fonte
Você não pode fazer isso, verifique a documentação
auto_now e auto_now_add são campos não editáveis e você não pode substituí-los ...
fonte