我正在通过以下模型扩展Django的用户模型
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
favorites = models.ManyToManyField(Post, related_name='favorited_by')
当我点击调用以下视图的按钮时,
def add_fav(request,pk):
post = get_object_or_404(Post, pk=pk)
form = PostForm(instance=post)
post = form.save(commit=False)
userprofile=request.user.profile
with userprofile.favorites.all as favorite_posts:
for post in post_list:
if post not in favorite_posts:
userprofile.favorites.add(post)
userprofile.save()
return redirect('post_list')
我收到错误RelatedObjectDoesNotExist 用户没有个人资料
我应用了迁移和所有内容。
答案 0 :(得分:2)
您可能没有Profile对象。您需要为现有用户创建配置文件(正确的方式是在迁移中),并在创建新用户时创建用户配置文件。
另一种更简单的方法是检查配置文件是否存在,如果不存在 - 创建它。 (在这种情况下,您必须使此字段不是强制性的。 你可以这样做:
list(FILTER
答案 1 :(得分:0)
这发生在我身上一次,我浪费了一天的调试时间。
就我而言,该应用程序名为“users
”。
长话短说,在我的 settings.py 和 INSTALLED_APPS
下,我有:
MY_APPS = [
.....
'blog',
'users',
.....
]
INSTALLED_APPS.extend(MY_APPS)
改为:
MY_APPS = [
.....
'blog',
'users.apps.UsersConfig',
.....
]
INSTALLED_APPS.extend(MY_APPS)
成功了。
我仍然不知道为什么,但它工作得很好('users'
中的 INSTALLED_APPS
)。用户已创建,用户配置文件已创建。信号在发射。突然之间,它停止了工作。很高兴我修好了。把我逼疯了!