Django DateTimeField是不可编辑的

时间:2018-12-28 08:49:23

标签: django django-models django-admin

我有一个博客,并且发表了许多文章。每篇文章都有发布日期,有时我必须编辑该日期。一切都在Django管理控制台上运行,并且我从未遇到任何500错误,因为我决定在我的admin.py中添加DateTimeField。

问题是,Django无法编辑DateTimeField并返回:

  

内部服务器错误:/ admin / wall / articles / 62 / change /

     / p / admin / wall / articles / 62 / change /'date'中的

FieldError不能为   指定为Articles模型表格,因为它是不可编辑的字段。校验   字段/字段集/排除ArticlesAdmin类的属性。

我不明白为什么它不起作用。

型号:

class Articles(models.Model):
    title = models.CharField(max_length=100, null=False, verbose_name="Titre")
    description = models.TextField(max_length=500, null=False, verbose_name="Description pour les partages sur les réseaux sociaux")
    subtitle = models.TextField(max_length=300, null=True, verbose_name="Sous-titre")
    text = RichTextUploadingField()
    tag = models.ManyToManyField(Tag, verbose_name="Tag")
    subcategory = models.ForeignKey(SubCategory, verbose_name="Sous-catégorie", blank=True, null=True)
    image = models.FileField(upload_to='media/articles/', validators=[validate_file_extension], blank=True, null=True, verbose_name="Image de présentation")
    image_description = models.CharField(max_length=100, null=True, verbose_name="Description pour cette image")
    image_legende = models.CharField(max_length=100, null=True, verbose_name="Légende pour cette images")
    author = models.ForeignKey(User, verbose_name="Auteur")
    published = models.BooleanField(default=True, verbose_name="Publié")
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
    update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")


    def get_absolute_url(self):
        return reverse('read', kwargs={'post':self.id, 'slug':slugify(self.title)})

    def __str__(self):
        return self.title

admin.py

class ArticlesAdmin(admin.ModelAdmin):
    list_display = ('date', 'title', 'author', 'published', 'update')

    fieldsets = (
        ('Général', {
            'fields': ('title', 'author', 'published', 'tag')
            }),
        ('Date de publication', {
            'fields': ('date',)}),
        ('Choisir une image de présentation (700px de largeure et 320px de hauteur', {
            'fields': ('image',)}),
        ('Description de l\'image', {
            'fields': ('image_description',)}),
        ('Légende de l\'image', {
            'fields': ('image_legende',)}),
        ('Sous-titre de l\'article', {
            'fields': ('subtitle',)}),                  
        ('Contenu de l\'article', {
            'fields': ('text', 'description')}),
    )

admin.site.register(Articles, ArticlesAdmin)

2 个答案:

答案 0 :(得分:2)

auto_now_add=True使该字段不可编辑。 您应该禁用auto_now_addauto_now_add=False)并自己实现该行为(例如,在文章save()的{​​{1}}方法中)。

关于命名的一点评论:您应该以单一形式而不是复数(文章而不是文章)来命名模型

答案 1 :(得分:0)

如果您要在具有“ auto_now_add = True / auto_now = True”参数的管理网站日期时间字段中显示/编辑, 只需在类模型中使用“ fieldname.editable = True”,例如:

 class Articles(models.Model):
    title = models.CharField(max_length=100, null=False, verbose_name="Titre")
    description = models.TextField(max_length=500, null=False, verbose_name="Description pour les partages sur les réseaux sociaux")
    subtitle = models.TextField(max_length=300, null=True, verbose_name="Sous-titre")
    text = RichTextUploadingField()
    tag = models.ManyToManyField(Tag, verbose_name="Tag")
    subcategory = models.ForeignKey(SubCategory, verbose_name="Sous-catégorie", blank=True, null=True)
    image = models.FileField(upload_to='media/articles/', validators=[validate_file_extension], blank=True, null=True, verbose_name="Image de présentation")
    image_description = models.CharField(max_length=100, null=True, verbose_name="Description pour cette image")
    image_legende = models.CharField(max_length=100, null=True, verbose_name="Légende pour cette images")
    author = models.ForeignKey(User, verbose_name="Auteur")
    published = models.BooleanField(default=True, verbose_name="Publié")
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
    update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")



    date.editable = True 
    update.editable = True
 
    def get_absolute_url(self):
        return reverse('read', kwargs={'post':self.id, 
       'slug':slugify(self.title)})

    def __str__(self):
       return self.title