Django中的Slug字段错误

2 投票
2 回答
3245 浏览
提问于 2025-04-16 16:38

我正在尝试将这个博客应用集成到我的网站中,但在处理slug字段时遇到了一个错误,我该如何解决这个问题呢?

     TypeError at /login/

     __init__() got an unexpected keyword argument 'prepopulate_from'

     Request Method:   GET
     Request URL:   http://192.168.254.35/accounts/login/new_wind/
     Django Version:   1.2.1 SVN-1957
     Exception Type:   TypeError
     Exception Value:

     __init__() got an unexpected keyword argument 'prepopulate_from'

这是我的models.py文件

from django.db import models
from datetime import datetime

class BlogPost(models.Model):
  title = models.CharField(max_length=128)
  slug = models.SlugField(prepopulate_from=('title',))
  body = models.TextField()
  published = models.BooleanField(default=True)
  date_posted = models.DateTimeField(default=datetime.now)

def __unicode__(self):
    return self.title

class Admin:
    pass

2 个回答

1

看起来在Django中,预填充的方式已经更新了,具体可以参考这个问题:有没有简单的方法可以从CharField填充SlugField?

4

这个错误信息很明确:SlugField 这个字段不支持 prepopulate_from 这个参数。官方文档也说明了这一点,它只接受 max_length 这个参数,外加一些标准参数。要实现这个功能,应该在 管理类 中进行设置。

编辑:所以你的模型文件应该是:

from django.db import models
from datetime import datetime

class BlogPost(models.Model):
  title = models.CharField(max_length=128)
  slug = models.SlugField()
  body = models.TextField()
  published = models.BooleanField(default=True)
  date_posted = models.DateTimeField(default=datetime.now)

def __unicode__(self):
    return self.title

而同一个应用的 admin.py 文件应该是:

from django.contrib import admin
from myapp.models import BlogPost

class BlogPostAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}

admin.site.register(BlogPost, BlogPostAdmin)

如果你不太明白管理网站是怎么工作的,可以参考 官方 Django 教程的第二部分

撰写回答