【问题标题】:Django 1.11.8 - Slug - Unexpected Keyword argumentDjango 1.11.8 - Slug - 意外的关键字参数
【发布时间】:2018-02-20 14:44:26
【问题描述】:

我是 django 的新手,几天前我开始构建我的第一个应用程序。我首先阅读了 MDN 教程和 Django 教程 - 构建 2 个“虚拟”应用程序。

我目前正在尝试开发一个照片库应用程序,该应用程序将显示属于某个相册的所有图片。我可以在我的 urls.py 和基于类的视图中实现这一点,不过,我想使用 .我希望我的网址看起来像 mysite.com/myapp/my-album-name vs mysite.com/myapp/1

我知道他们是在这里被问过的类似问题,我已经解决了大部分问题,阅读了关于 Single Object Mixins, Class Based Views 的 Django 文档,但我仍然不明白如何让 slug 工作。

到目前为止,我已经尝试过:

  1. 在我的模型和相应的 slug 中实现一个 slug 字段 我的 admin.py 文件中的值:

模型

class Album(models.Model):
    album_name = models.CharField(max_length=100, help_text="Enter the name of your album" )
    album_creation_date = models.DateField(auto_now_add=True)
    album_modified_date = models.DateField(auto_now=True)
    slug = models.SlugField(max_length=50)

观看次数

class albumPictures(generic.DetailView):
    model = Album 

管理员

class AlbumAdmin(admin.ModelAdmin):
    list_display = ('album_name', 'album_creation_date')
    slug = prepopulated_fields = {'slug': (Album.album_name)}

admin.site.register(Album, AlbumAdmin)

错误信息:<class 'Albums.admin.AlbumAdmin'>: (admin.E030) The value of 'prepopulated_fields["slug"][0]' refers to '<django.db.models.query_utils.DeferredAttribute object at 0x107f234a8>', which is not an attribute of 'Albums.Album'.

  1. 在我的模型中使用 prepopulated_from=album_nameprepopulated_fields=album_name 实现 slug 字段

模型 (1)

class Album(models.Model):
    album_name = models.CharField(max_length=100, help_text="Enter the name of your album" )
    album_creation_date = models.DateField(auto_now_add=True)
    album_modified_date = models.DateField(auto_now=True)
    slug = models.SlugField(prepopulated_from=album_name)

模型 (2)

class Album(models.Model):
    album_name = models.CharField(max_length=100, help_text="Enter the name of your album" )
    album_creation_date = models.DateField(auto_now_add=True)
    album_modified_date = models.DateField(auto_now=True)
    slug = models.SlugField(prepopulated_fields=album_name)

观看次数

class albumPictures(generic.DetailView):
    model = Album 

错误信息:TypeError: __init__() got an unexpected keyword argument 'prepopulated_from'

感谢您的帮助

【问题讨论】:

    标签: python django slug django-1.11


    【解决方案1】:

    models.SlugField() 不支持prepopulated_fromprepopulated_fields,所以在你的模型中你应该使用

    slug = models.SlugField(max_length=50)
    

    而不是

    slug = models.SlugField(prepopulated_from=album_name)
    

    slug = models.SlugField(prepopulated_fields=album_name)
    

    其次,在您的 ModelAdmin 类中,您应该使用带有 prepopulated_fields 选项的字符串元组:

    class AlbumAdmin(admin.ModelAdmin):
        list_display = ('album_name', 'album_creation_date')
        prepopulated_fields = {'slug': ("album_name",)}
    

    【讨论】:

    • 感谢您的回答。我忘了把“album_name”放在引号里。上面的方法和slugify有什么区别,slugify是做什么的?
    • prepopulated_fields 是一项管理功能,当您在另一个或多个字段中输入文本时,它使用 JavaScript 自动填充 slug 字段。 slugify 接受一个字符串并将其变成一个 slug,例如"Joel is a slug""joel-is-a-slug"。您可以在管理员之外使用它,例如在模型的save 方法中。
    猜你喜欢
    • 2018-08-07
    • 2013-10-29
    • 2022-01-18
    • 2023-03-09
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多