我有两个链接模型:
class MyUser(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=24, unique=True)
profile_page = models.OneToOneField(Profile, null=True)
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True, blank=True)
我正在尝试检索并返回此CBV中单个用户配置文件的实例:
class ProfileView(DetailView):
queryset = Profile.objects.all()
template_name = 'profile_detail.html'
def get_object(self, *args, **kwargs):
user_profile = self.kwargs.get('username')
obj = get_object_or_404(Profile, user=user_profile)
return obj
get_object_or_404
调用导致以下异常:invalid literal for int() with base 10: 'adam'
“adam”,因为我正在请求页面url:http://127.0.0.1:8000/profile/adam
以下是我的url模式:
urlpatterns = [
url(r'^edit/', profile_edit, name='profile_edit'),
url(r'^(?P<username>[\w.@+-]+)$', ProfileView.as_view(), name='profile'),
]
(以防万一:它们也属于namespaced/profile/)
我正在尝试访问配置文件模型中的模型字段。
为什么我在尝试return obj
到我的配置文件时收到错误_详细信息.html模板?你知道吗
我的尝试:
如果我将URL regex改为accept ID或PK而不是<username>
,并访问/profile/1的URL,我将收到:TypeError at /profile/1
__str__ returned non-string (type MyUser)
。如果我随后将代码更新为:
def get_object(self, *args, **kwargs):
user_profile = self.kwargs.get('id')
obj = get_object_or_404(Profile, user=user_profile)
objj = obj.user
return objj
然后,错误清除,我可以得到一些东西出现在个人资料_详细信息.html第页。但是,{{object}}
引用的是MyUser模型,而不是我所希望的Profile模型。
可能发生了什么?这和
def __str__(self):
return self.username
在模型里?你知道吗
编辑:我的配置文件模型的字符串方法:
def __str__(self):
return self.user
您将
username
包含在url中,而不是用户id。因此,您需要按如下所示更改get_object_or_404
行:如错误消息
__str__ returned non-string (type MyUser)
所示,您的Profile.__str__
方法应该返回一个字符串,例如:最后,您似乎有两个
OneToOneFields
,MyUser.profile_page
和Profile.user
。这是不必要的。如果删除MyUser.profile_page
字段,则可以使用user.profile
从MyUser
向后跟踪Profile.user
关系到Profile
。你知道吗相关问题 更多 >
编程相关推荐