Фильтр модели, назначенной пользователю , 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})

Надеюсь, это поможет вам!

Вернуться на верх