修改django对象模型以实现更好的管理CRUD管理

时间:2017-07-05 23:06:18

标签: django

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

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

model.py

https://api.github.com/search/repositories?q=githubSearchQueryValue&sort=stars

(简化)admin.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" ),
        )        

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

2 个答案:

答案 0 :(得分:0)

  1. 在Post类中更改__unicode__的{​​{1}}并打印您想要的内容。例如:__str__

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

  3. 希望这有帮助。

答案 1 :(得分:0)

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

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

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