Фильтр модели, назначенной пользователю , ManyToManyField - Django
новичок в django и мне трудно понять, что искать и какие вопросы задавать, так что.... вот так...
У меня есть модель Obiectiv, которой я назначил пользователей в панели администратора с помощью manytomanyfield.
models.py:
class Obiectiv(models.Model):
numeObiectiv = models.CharField(max_length=250)
color = models.CharField(max_length=6, choices=COLOR_CHOICES, default='green')
user = models.ManyToManyField(User)
Я хочу, чтобы когда пользователь входит в систему, он мог видеть только те модели, которые были ему назначены:
views.py
@login_required
def home(request):
obiective = Obiectiv.objects.all()
return render(request, 'home.html', context={"obiective":obiective})
С помощью кода в views.py отображаются все модели Obiectiv.
home.html
{% for obiectiv in obiective %}
<div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
<div class="card rounded-0 shadow border-primary text-start summary-card my-3">
<div class="card-body">
<div class="d-flex w-100">
<div class="col-8 pe-2">
<div class="summary-title fs-5 border-bottom">Total Categories</div>
<div class="summary-count text-end fw-bolder mt-3 px-4">{{ obiectiv.numeObiectiv|intcomma }}</div>
</div>
<div class="col-4">
<div class="summary-icon p-3 rounded border text-center bg-gradient bg-light">
<i class="fa fa-list"></i>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
заранее спасибо.
В Django, когда у нас есть отношения "многие ко многим", Django сопоставляет набор объектов с обеих сторон отношения: https://docs.djangoproject.com/en/4.1/topics/db/examples/many_to_many/
То есть, вы можете получить доступ к Obiectiv.user
и вы также можете получить доступ к User.obiectiv_set
(другой стороне отношения).
Тогда вы можете переписать ваше представление следующим образом:
@login_required
def home(request):
obiective = request.user.obiectiv_set.all()
return render(request, 'home.html', context={"obiective":obiective})
Надеюсь, это поможет вам!