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.user
或 author_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)
我正在学习 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.user
或 author_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)