python-无法使用OneToOne关系中的属性自动填充Django管理字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-无法使用OneToOne关系中的属性自动填充Django管理字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2098字,纯文字阅读大概需要3分钟。
内容图文
![python-无法使用OneToOne关系中的属性自动填充Django管理字段](/upload/InfoBanner/zyjiaocheng/662/9c410f737daf461488d978dd09eaaeb2.jpg)
有类似的问题,但我相信我是不同的.我对Django和Python还是很陌生,所以请原谅我的无知.
我有一个自定义类UserProfile,它从django.contrib.auth.models User类继承.该UserProfile基于与Django一起在Tango中的练习,但是,我正在使用该示例创建其他项目/应用程序.
我在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.我希望它根据用户的用户名属性自动填充.但是,我似乎无法使其工作.这是我的admin.py代码:
class UserProfileAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("user.username",)}
当我尝试从命令行运行runserver时,出现以下错误:
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).
即使我可以在python shell中以这种方式访问??它,也不允许我以这种方式访问??user.username属性.关于如何进行这项工作的任何想法?
解决方法:
不幸的是,prepopulated_fields不接受DateTimeField,ForeignKey或ManyToManyField字段.
可能的解决方案,在您的models.py中(使slug属性为可选):
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)
内容总结
以上是互联网集市为您收集整理的python-无法使用OneToOne关系中的属性自动填充Django管理字段全部内容,希望文章能够帮你解决python-无法使用OneToOne关系中的属性自动填充Django管理字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。