Django:如何只向同一用户显示用户制作的内容?

Django: How to only display content made by a user to that same user?

我正在学习 Django(很明显),关于我正在构建的项目,我刚刚注意到的一件事是,最初,每个用户都可以看到每个其他用户制作的 objects/content。例如,我的项目是一个非常基本的梦幻足球应用程序,我已将其设置为用户可以通过将列出的球员添加到我的名为“MyTeam”的团队模型来创建团队,如此处所示。

class Myteam(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    QB = models.CharField(max_length=80, null=True)
    QBscore = models.IntegerField(null=True)
    RB1 = models.CharField(max_length=80, null=True)
    RB1score = models.IntegerField(null=True)
    RB2 = models.CharField(max_length=80, null=True)
    RB2score = models.IntegerField(null=True)
    WR = models.CharField(max_length=80, null=True)
    WR1score = models.IntegerField(null=True)
    WR2 = models.CharField(max_length=80, null=True)
    WR2score = models.IntegerField(null=True)
    TE = models.CharField(max_length=80, null=True)
    TEscore = models.IntegerField(null=True)
    D = models.CharField(max_length=80, null=True)
    Dscore = models.IntegerField(null=True)
    K = models.CharField(max_length=80, null=True)
    Kscore = models.IntegerField(null=True)

我了解了用于将特定内容链接到特定用户的 ForeignKeys,我想弄清楚的下一步是如何获取它,以便登录的用户只能看到他们的团队,而没有人别人的。我一直在通过 google 在这里和其他地方搜索,但作为 Django 菜鸟,甚至很难首先用语言表达要搜索的正确问题。

当我看到某处可能需要过滤 views.py 中返回的内容时,我认为我走在了正确的轨道上。这是我之前尝试过但没有用的方法。

def index(request):
    
    team = Myteam.objects.filter(user=request.user.username)

这总是returns错误...

Cannot resolve keyword 'user' into field. Choices are: D, Dscore, K, Kscore, QB, QBscore, RB1, RB1score, RB2, RB2score, TE, TEscore, WR, WR1score, WR2, WR2score, author, author_id, id

以前,我在 views.py > def index 中的代码是

def index(request):
    
    team = Myteam.objects.get()

这显然是在获取数据库中的所有对象。我知道我需要按用户过滤掉,但我不太确定如何让它工作。如果你看到这个,我感谢你的时间和关注。

这是我的用户 class。

from django.contrib.auth.models import AbstractUser
from django.db import models
import datetime



class User(AbstractUser):
    pass

这里是login.html

{% extends "game/layout.html" %}

{% block body %}
<div class="container">
<div class="card">
    <div class="card-body">
        <h2>Login</h2>

        {% if message %}
            <div>{{ message }}</div>
        {% endif %}

        <form action="{% url 'login' %}" method="post">
            {% csrf_token %}
            <div class="form-group">
                <input autofocus class="form-control" type="text" name="username" placeholder="Username">
            </div>
            <div class="form-group">
                <input class="form-control" type="password" name="password" placeholder="Password">
            </div>
            <input class="btn btn-primary btn-block" type="submit" value="Login">
        </form>
        <br>
        Don't have an account? <a href="{% url 'register' %}">Register here.</a>
    </div>
</div>
</div>

{% endblock %}

很简单...

首先获取您的 User 模型。

from YourUserApp.model import User

然后,让你的用户像下面这样:

def index(request):
    user = User.objects.get(username=username, password=password)
    team = Myteam.objects.filter(author=user)

完成...

如果您没有username or password,您可以使用自己的凭据。

能否粘贴您的 User 模型?

使用这个:

from django.contrib.auth import authenticate, login
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
team = Myteam.objects.filter(author=user)

如果 user = authenticate(username=username, password=password) 不起作用,则使用 user=request.userauthor_id=request.user.id

这样写你的观点

def index(request):

    team = Myteam.objects.filter(author=request.user).first()

def index(request):

    team = Myteam.objects.filter(author_id=request.user.id).first()

您正在将 id 传递给名称字段。

这里:作者指的是一个用户字段

如果您想为该用户获取相关团队,请按此操作

team = Myteam.objects.filter(author_id=request.user.id)

or

team = Myteam.objects.filter(author=request.user)