Я новичок в веб-разработке и создаю веб-приложение для блога в Django.
У меня проблемы с добавлением новых сообщений через django-admin. При нажатии на кнопку «Добавить» появляется сообщение об ошибке "Error during template rendering - 'str' object has no attribute 'utcoffset'".
модели.py
from django.db import models
from django.utils import timezone
import datetime
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField(blank=True, null=True)
post_date = models.DateTimeField(default='date posted')
def published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.post_date <= now
published_recently.admin_order_field = 'post_date'
published_recently.boolean = True
published_recently.short_description = 'Recent post?'
def __str__(self):
return self.title
class Customer(models.Model):
username = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
lastname = models.CharField(max_length=50)
email = models.CharField(max_length=50)
country = models.CharField(max_length=50)
reg_date = models.DateTimeField(default='date reg')
def __str__(self):
return self.username
class Comment(models.Model):
comment_cont = models.TextField(max_length=200)
user_name = models.ForeignKey(Customer, default=0, on_delete=models.CASCADE)
comment_post = models.ForeignKey(Post, on_delete=models.CASCADE)
votes = models.BigIntegerField(default=0)
comment_date = models.DateTimeField(default='date commented')
def __str__(self):
return self.comment_cont
class Feedback(models.Model):
feedback_title = models.CharField(max_length=50)
feedback_detail = models.CharField(max_length=200)
user_name = models.ForeignKey(Customer, default=1, verbose_name='user_name', on_delete=models.SET_DEFAULT)
admin.py
from django.contrib import admin
from .models import Post, Customer, Feedback, Comment
# Register your models here.
class CommentInLine(admin.TabularInline):
model = Comment
extra = 1
fields = ['comment_cont', 'votes', 'comment_date']
class CustomerAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['firstname', 'lastname', 'username', 'email', 'country', 'reg_date']})
]
class PostAdmin(admin.ModelAdmin):
fieldsets = [
('Post', {'fields': ['title', 'content']}),
('Date information', {'fields': ['post_date'], 'classes':['collapse']}),
]
inlines = [CommentInLine]
list_display = ('title', 'content', 'post_date', 'published_recently')
list_filter = ['post_date']
search_fields = ['title']
class FeedbackAdmin(admin.ModelAdmin):
fieldsets = [
('Feedback', {'fields': ['feedback_title', 'feedback_detail', 'user_name']}),
]
list_display = ('user_name', 'feedback_title', 'feedback_detail')
# inlines = [CustomerInLine]
# list_display = ('user_name', 'feedback_title', 'feedback_detail')
class CommentAdmin(admin.ModelAdmin):
fields = ['user_name', 'comment_post', 'comment_cont', 'votes', 'comment_date']
admin.site.register(Post, PostAdmin)
admin.site.register(Feedback, FeedbackAdmin)
admin.site.register(Customer, CustomerAdmin)
admin.site.register(Comment, CommentAdmin)
Я хочу иметь возможность добавлять сообщения через администратора Django. Любые другие исправления в коде приветствуются. Я ценю помощь. Спасибо.
Спасибо. Я попробовал то, что вы предложили, и обнаружил проблему в классе CommentInLine. Большое спасибо.





post_date = models.DateTimeField(default='date posted')
post_date – это DateTimeField, и вы указали строку по умолчанию. Это должен быть экземпляр datetime.datetime.
post_date = models.DateTimeField(default=timezone.now)
# or
post_date = models.DateTimeField(auto_now_add=True, verbose_name='Publish Time')
должен решить проблему
@MrUzo ответ сработал? Если да, примите ответ, чтобы он помог другим
Спасибо. Я пробовал оба, все равно выдает одно и то же сообщение об ошибке.
запустите миграцию, а затем выполните миграцию
Я считаю, что это было частью решения, но основная проблема заключалась в «comment_date» в классе CommenIntLine. Я снял его, и он решил проблему. Большое спасибо.
comment_date = models.DateTimeField(default='date commented') это было из-за этого, как я упоминал в ответе, вы указали строку по умолчанию для поля даты и времени,
См. этот вопрос: stackoverflow.com/questions/51870088/…. Возможно, один из ваших столбцов БД - это дата типа. Попробуйте запустить миграцию еще раз. Попробуйте удалить поля одно за другим из набора полей PostAdmin, чтобы помочь отладить, какое поле вызывает у вас проблемы.