Python 无法使用OneToOne关系中的属性自动填充Django admin字段

Python 无法使用OneToOne关系中的属性自动填充Django admin字段,python,django,Python,Django,有类似的问题,但我相信我的是不同的。我对Django和Python非常陌生,所以请原谅我的无知 我有一个自定义类UserProfile,它继承自django.contrib.auth.models用户类。这个用户配置文件基于Tango与Django的练习,但是,我使用这个示例创建了一个不同的项目/应用程序 我在my models.py中使用OneToOneField关系将UserProfile链接到标准用户模型,如下所示: class UserProfile(models.Model):

有类似的问题,但我相信我的是不同的。我对Django和Python非常陌生,所以请原谅我的无知

我有一个自定义类UserProfile,它继承自django.contrib.auth.models用户类。这个用户配置文件基于Tango与Django的练习,但是,我使用这个示例创建了一个不同的项目/应用程序

我在my models.py中使用OneToOneField关系将UserProfile链接到标准用户模型,如下所示:

class UserProfile(models.Model):
    # Links UserProfile to a User model instance.
    user = models.OneToOneField(User)
    # The additional attribute I wish to include that isn't in User.
    slug = models.SlugField(unique=True)
在我的admin.py文件中,我想要一个可以使用的UserProfile接口,并且我想要在输入新的UserProfile时自动填充slugfield。我希望它能根据User的username属性自动生成。然而,我似乎无法让它工作。这是我的admin.py代码:

class UserProfileAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("user.username",)}
当我尝试从命令行运行Server时,出现以下错误:

ERRORS: <class 'climbcast.admin.UserProfileAdmin'>: (admin.E030) The
value of >'prepopula ted_fields["slug"][0]' refers to 'user.username',
which is not an attribute of >' climbcast.UserProfile'.

System check identified 1 issue (0 silenced).
错误::(admin.E030)
>'prepopulated_fields[“slug”][0]的值引用了'user.username',
它不是>'grampcast.UserProfile'的属性。
系统检查发现1个问题(0个静音)。

它不允许我以这种方式访问user.username属性,即使我可以在python shell中以这种方式访问它。关于如何实现这一点,有什么想法吗?

不幸的是,
预填充字段
不接受
datetime字段
ForeignKey
,也不接受
ManyToManyField
字段

资料来源:

可能的解决方案,在models.py中(使
slug
属性可选):


谢谢这确实奏效了,我真的很感谢你的帮助。事实证明,尽管我的slug字段在我眼前并没有自动填充,但它毕竟在save()上起了作用。我可以接受。谢谢
from django.utils.encoding import force_text
from django.template.defaultfilters import slugify


class UserProfile(models.Model):
    [...]
    slug = models.SlugField(blank=True, db_index=True, unique=True)

    def get_unique_slug(self, value):
        """
        Generate a valid slug for a for given string.
        """
        qs = self.__class__.objects.all()
        used = qs.values_list('slug', flat=True)
        i = 1
        baseslug = slugify(value)
        while slug in used:
            slug = '%s-%s' % (baseslug, i)
            i += 1
        return slug

    def save(self, *args, **kwargs):
        if not self.slug and self.user:
          self.slug = self.get_unique_slug(force_text(self.user.username))
        super(UserProfile, self).save(*args, **kwargs)