我正在使用Django开发博客,我希望我的帖子与他们的作者有关。我在我的Blog模型类中创建了一个author字段,它是一个指向User对象的ForeignKey。问题是,南数据库迁移django工具要求我提供一个默认值。实际上,我希望它是编辑帖子的登录用户的ID,但无法看到如何制作它。有什么想法吗?
这是我的Blog模型类:
class Blog(models.Model):
PUBLISHING_STATUS = (
('P', 'Published'),
('D', 'Draft'),
('AA', 'Awaiting Approval'),
)
title = models.CharField(max_length=128, unique=True)
slug = models.SlugField(max_length=160, unique=True)
header_image = models.ImageField(upload_to='images/uploaded', max_length=256, null=True)
body = models.TextField()
author = models.ForeignKey(User)
status = models.CharField(max_length=2, choices=PUBLISHING_STATUS, null=True)
posted = models.DateTimeField('date posted')
category = models.ForeignKey('blog.Category')
tags = models.ManyToManyField('blog.Tags')
def __unicode__(self):
return self.title
def get_absolute_url(self):
return '/blog/%s/view_post' % self.slug
谢谢!
答案 0 :(得分:3)
如果您希望需要该字段,则必须在迁移时设置默认值。由于您没有在任何地方存储任何关于谁创建帖子的数据,您只能将其设置为特定用户,在这种情况下可能应该是您的管理员用户!
然后,您可以编辑管理员中的帖子,并在必要时将其设置为正确的作者!
如果您想在管理员中保存新帖子时自动填充字段,则必须覆盖save_model
上的ModelAdmin
方法:
class BlogPostAdmin(model_admin):
def save_model(self, request, instance, form, change):
user = request.user
instance = form.save(commit=False)
if not change or not instance.author:
instance.author = user
instance.save()
form.save_m2m()
return instance
答案 1 :(得分:1)
问题是,南数据库迁移django工具要求我提供一个默认值。
为什么呢?因为您有旧数据要保留?也许你不应该试图保留任何旧数据。
实际上,我希望它是编辑帖子的登录用户的ID,但无法看到如何制作。有什么想法吗?
这就是视图功能的用途。您不在模型中执行此操作。您可以在处理表单的视图函数中执行此操作。
答案 2 :(得分:0)
您应该将此作为两个步骤来完成。首先,使用任何默认值执行模式迁移以创建新结构。然后,执行数据迁移以使用用户表中的正确值更新author列。