【发布时间】:2017-08-18 15:29:35
【问题描述】:
我试图在创建新闻时自动选择新闻的作者。
这是我的代码:
型号:
from django.db import models
from ckeditor.fields import RichTextField
from django.contrib.auth.models import User
# Create your models here.
class News(models.Model):
news_title = models.CharField(max_length=420, help_text="Insert only the news title, be specific and short!")
pub_date = models.DateTimeField('date published')
article_text = RichTextField()
news_author = models.CharField(User, max_length=250, editable = False, default='unknown')
class Meta:
ordering = ["news_title", "-pub_date"]
verbose_name = "News"
verbose_name_plural = "News"
def get_absolute_url(self):
return reverse('model-detail-view', args[str(self.id)])
def __str__(self):
return self.news_title
管理员:
from django.contrib import admin
# Register your models here.
from .models import News
admin.site.site_header = "SoLS UCP Admin Panel"
class NewsAdmin(admin.ModelAdmin):
list_display = ('news_title', 'pub_date', 'news_author')
def save_model(self, request, obj, form, change):
if getattr(obj, 'news_author', None) is None:
obj.news_author = request.user
obj.save()
admin.site.register(News, NewsAdmin)
问题是我给作者设置了 null = True 并且数据库搞砸了旧新闻,所以我删除并对其应用了默认值但我得到了这个错误..所以我直接从 phpmyadmin 删除了所有旧新闻,但是没有成功,错误依然存在:
ValueError: invalid literal for int() with base 10: 'andrei'
在此之前还有更多:
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line
utility.execute()
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\core\management\__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\core\management\base.py", line 330, in execute
output = self.handle(*args, **options)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\core\management\commands\migrate.py", line 204, in handle
fake_initial=fake_initial,
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\migrations\executor.py", line 115, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\migrations\executor.py", line 145, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\migrations\executor.py", line 244, in apply_migration
state = migration.apply(state, schema_editor)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\migrations\migration.py", line 129, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\migrations\operations\fields.py", line 216, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\backends\base\schema.py", line 515, in alter_field
old_db_params, new_db_params, strict)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\backends\base\schema.py", line 613, in _alter_field
new_default = self.effective_default(new_field)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\backends\base\schema.py", line 229, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\models\fields\related.py", line 963, in get_db_prep_save
return self.target_field.get_db_prep_save(value, connection=connection)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\models\fields\__init__.py", line 770, in get_db_prep_save
prepared=False)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\models\fields\__init__.py", line 958, in get_db_prep_value
value = self.get_prep_value(value)
File "C:\Users\andrei\Envs\sols-ucp\lib\site-packages\django\db\models\fields\__init__.py", line 966, in get_prep_value
return int(value)
此外,如果我尝试访问模型页面,我会收到此错误
(1054, "Unknown column 'catalog_news.news_author' in 'field list'")
【问题讨论】:
-
在 request.user 你有字符串或用户对象?执行哪个命令后会出现此错误?你做了
python manage.py migrate吗? -
@VladyslavUshakov 那是我收到错误的时候
标签: python django django-models