簡體   English   中英

如何獲取當前登錄用戶? Django款

[英]How to get the current logged in user? Django models

我想讓當前登錄的用戶訪問這個 CreateForm 表單。 下面我給出了我當前的代碼,這里 request.user 沒有給我錯誤

/create-post/ 處的 ValueError 無法分配“<SimpleLazyObject: <User: testuser>>”:“Post.author”必須是“Author”實例。

模型.py

class Author(models.Model):
   user = models.OneToOneField(User, on_delete=models.CASCADE)
   rate = models.IntegerField(default=0)
 
class Post(models.Model):
    title = models.CharField(max_length= 50)
    overview = models.TextField()
    body_text = RichTextUploadingField(null = True)
    time_upload = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(Author, related_name='author', on_delete=models.CASCADE)
    thumbnail = models.ImageField(upload_to = 'thumbnails')
    publish = models.BooleanField()
    categories = models.ManyToManyField(Categories)
    read = models.IntegerField(default=0)
    slug = models.SlugField(null= True, blank= True)

Forms.py

class CreateForm(ModelForm):
class Meta:
    model = Post
    fields = [
        'title',
        'overview',
        'body_text',
        'thumbnail',
        'categories',
        'publish',
    ]

視圖.py

def create_post(request):
if request.method == 'POST':
    form = CreateForm(request.POST, request.FILES)
    if form.is_valid:
        post = form.save(commit=False)
        post.author= request.user
        post.save()
        return render(request, 'index.html')
else:
    form = CreateForm()
return render(request, 'create_post.html', {'form': form})

如錯誤所述, post.author需要Author object,而不是用戶。 因此,您可以通過以下方式檢索它:

from django.contrib.auth.decorators import login_required

@login_required
def create_post(request):
    if request.method == 'POST':
        form = CreateForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.author= request.user.author
            form.save()
            return render(request, 'index.html')
    else:
        form = CreateForm()
    return render(request, 'create_post.html', {'form': form})

你還應該調用is_valid()方法[Django-doc] ,所以form.is_valid ()


注意:您可以使用@login_required裝飾器[Django-doc]將視圖限制為經過身份驗證的用戶的視圖。


注意:通常使用settings.AUTH_USER_MODEL [Django-doc]來引用用戶 model 比直接使用User模型[Django-doc]更好。 有關詳細信息,您可以參閱文檔中引用User model的部分

您的Post model 上的author字段是Author model 的外鍵,而不是用戶。 您可以將post.author = request.user替換為:

if request.user.author:
    post.author = request.user.author
else:
    post.author = Author.objects.create(user=request.user)

如果已經為用戶創建了 Author 實例,則 Willem 的答案有效,但如果沒有與該用戶關聯的 Author object,則會引發異常。

暫無
暫無

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

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