【发布时间】:2021-03-03 17:39:29
【问题描述】:
我的问题有点难以解释,但我会尽力而为。请问有什么需要澄清的。
我有三个模型,Exercise、Area 和 Workout:
class Exercise(models.Model):
name = models.CharField(max_length=100)
class Area(models.Model):
user = models.ForeignKey(Profile, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
exercise = models.ManyToManyField(Exercise, blank=True)
class Workout(models.Model):
weight = models.DecimalField(default=0.0)
reps = models.PositiveIntegerField(default=0)
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE)
用户将填写一个将对象添加到区域的表单。然后,他们可以进入该对象并填写一个新表格,将对象添加到练习中,这些对象也通过 M2M 附加到特定区域。为了只显示这个特定用户创建的练习,我在练习模板中有一个 if 语句:
{% if area.user.user == request.user %}`
{{ exercise.name }}
{% endif %}
我希望用户现在能够进入锻炼对象并填写添加到锻炼的表单。我可以做到这一点,但我的问题是如何确保只显示登录用户的锻炼? area.user.user 没有影响,因为区域与此模板无关,我无法将用户添加到锻炼模型。
编辑
class WorkoutView(DetailView):
model = Exercise
template_name = 'tracker/workouts.html'
def get_context_data(self, **kwargs):
context = super(WorkoutView, self).get_context_data(**kwargs)
context['profile'] = Profile.objects.get(user=self.request.user)
context['form'] = form
return context
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
【问题讨论】:
-
您能否编辑您的问题以显示您的观点。
-
嗨@sgt_pepper85!通常你会在你的视图中而不是在模板中这样做。将
login_required-decorator 或 Mixin 添加到您的视图中,这样只有登录的用户才能访问它。在视图中,使用请求用户request.user过滤您的数据。我看到你在Area中提到的不是 djangos 用户模型,而是一个名为Profile的模型,你能不能也给我们一些相关信息? -
感谢 Lewis 和 @Yves Hary 的回复。我已经编辑了我的问题以显示显示锻炼的视图,以及我的个人资料模型的 sn-p,根据要求将用户链接到 auth 用户模型
-
如果我没听错请告诉我:您想显示属于当前登录用户的所有锻炼对象吗?
-
是的,没错