簡體   English   中英

如何在DetailView中使用擴展的用戶模型?

[英]How can I use an extended user model in a DetailView?

我有一個負責顯示用戶個人資料的Django視圖。 我正在使用django本身提供的用戶模型,但我也想用自己的一些信息對其進行擴展,因此我制作了自己的模型來擴展用戶模型本身:

class UserProfile(AbstractBaseUser):
    is_verified = models.BooleanField(default=True)
    current_profile = models.ImageField(default=static('img/default_profile.jpg'))
    ratings = models.ManyToManyField(Video, through='UserProfileVideoRating', related_name='ratings')
    views = models.ManyToManyField(Video, through='UserProfileVideoView', related_name='views')
    CommentRating = models.ManyToManyField(Comment, through='UserProfileCommentRating', related_name='CommentRating')
    subscriptions = models.ManyToManyField(User)

這是我想使用的觀點:

User = get_user_model()
# Create your views here.

class profileDetailView(DetailView):
    template_name = 'profile.html'

    def get_object(self):
        username = self.kwargs.get("username")
        if username is None:
            raise Http404
        return get_object_or_404(User, username__iexact=username, is_active=True)

現在我的問題是,因為DetailViews是針對單個模型的 ,我如何實現這一目標?

您對擴展內置用戶模型的兩種方法感到困惑。

如果您從AbstractBaseUser繼承,則意味着您正在定義自己的用戶模型-您需要定義自己的用戶名/電子郵件字段等,並設置AUTH_USER_MODEL指向您的替換模型。 在這種情況下,您無需在模板中引用兩個模型,因為您的模型將 User。

但是,如果要定義一個相關的UserProfile,則無需繼承AbstractBaseUser,也不需要更改AUTH_USER_MODEL。 但您確實需要通過一對一字段定義與實際用戶模型的關系。 在這種情況下,您只需遵循模板中的關系即可訪問配置文件-例如,通過{{ user.userprofile.currentprofile }}等。

在您的情況下,我建議您選擇第二種方法。 從AbstractBaseUser刪除繼承,並向User添加一對一字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM