修改 django 对象模型以获得更好的管理 CRUD 管理



我正在使用 django 1.10 编写博客应用程序

这是我的对象模型的一个片段:

model.py

class Attachment(models.Model):
title = models.CharField(max_length=50)
image = models.ImageField(upload_to='attachments')

class FileAttachments(models.Model):
title = models.CharField(max_length=50)
attachments = models.ManyToManyField(Attachment)    

class Post(models.Model):
title = models.CharField(max_length=200)
text = models.CharField(max_length=2000)
file_attachments = models.ForeignKey(FileAttachments, blank=True, null=True)    
slug = models.SlugField(max_length=40, default='', unique=True)
author = models.ForeignKey(User, default=1)
pub_date = models.DateTimeField(blank=True, null=True)
def get_absolute_url(self):
return "/blog/%s/%s/%s/%s/" % (self.pub_date.year, self.pub_date.month, self.pub_date.day, self.slug)   
def __unicode__(self):
return self.title
class Meta:
verbose_name = "Blog Post"
verbose_name_plural = "Blog Posts"
ordering = ["-create_date"]
permissions = ( 
( "create", "Create Post" ),
( "modify", "Modify Post" ),
( "delete", "Delete Post" ),
)        

(简体)admin.py:

class PostAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
exclude = ('author',)
def save_model(self, request, obj, form, change):
obj.author = request.user
obj.save()
# Register your models here.
admin.site.register(Post, PostAdmin)

当我尝试通过管理页面访问 Post 对象时 - 在列表视图中,我只看到"Post 对象" - 而我想查看帖子的标题(可能还有 Post 对象的其他一些属性) - 如何修改管理视图来实现这一点?

对于您的第一个问题 - 您需要在PostAdmin中定义list_display,如下所示:

class PostAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
exclude = ('author',)
list_display = ('title', 'pub_date')

至于你的第二个问题 - 请坚持"一个帖子,一个问题"规则;提示 -ForeignKey意味着只有一个FileAttachment可以与您的帖子相关。

  1. 更改 Post 类中__str____unicode__并打印您想要的任何内容。 例如:return "Blog %s published on %s" %(self.title, self.pub_date).

  2. 您的 Post 模型仅包含一个通过外键的附件。 这样就不可能上传多个文件。 换句话说,您必须更改模型,例如在与帖子相关的文件附件中包含密钥,并从帖子模型中删除该密钥。

希望这有帮助。

最新更新