Необработанные результаты запроса увеличиваются во много раз, когда я использую INNER JOIN в Django

Я не могу понять, почему мой необработанный запрос умножает результат во столько раз, сколько пользователей. Я использую INNER JOIN и связываю два объекта, так что я действительно не могу понять этого. (У меня нет опыта в языке запросов Django, поэтому я использую необработанный запрос).

views.py

def index(request):
    projekt = Projekt.objects.raw('SELECT  projekt_id, stressz_projekt.projekt, last_name, first_name, stressz_profile.id, stressz_profile.user_id, auth_user.id FROM stressz_profile INNER JOIN stressz_projekt ON stressz_projekt.id = stressz_profile.projekt_id INNER JOIN auth_user ON auth_user.id = stressz_profile.user_id')

    template = loader.get_template('stressz/index.html')

    context = {
        'projekt': projekt,
    }
    return HttpResponse(template.render(context, request))

Вот простой пример использования ORM, который вы можете адаптировать к своему случаю:

Предположим, что у нас есть две модели, Country и City, следующим образом:

class Country(models.Model):

    """ country model """

    name = models.CharField(...)


class City(models.Model):

    """ city model with a foreign key to a country """

    country = models.ForeignKey('Country', ..., related_name='cities')
    name = models.CharField(...)
    population = models.PositiveIntegerField(...)

Мы можем использовать Django ORM следующим образом:

# filter for a country with a given name:
country = Country.objects.filter(name='Italy')
country.name # Italy

# filter for a city with a given name:
city = City.objects.filter(name='Rome')
city.name # Rome

# get the country the city belongs to:
country = city.country
country.name # Italy

# get the queryset of all cities with a population greater than 1 million in a specific country:
country = Country.objects.filter(name='Italy')
large_cities = country.cities.filter(population__gt=1000000)
for city in large_cities:
    print(city.name)   
# loop will print: Rome, Milan

Кроме того, похоже, что вы просто передаете экземпляр Projeckt в ваш шаблон. Поэтому вам действительно не нужен ORM, вместо этого вы можете сделать что-то вроде:

Я также коротко добавлю, что, похоже, вы изменили соотношение профиль-проект на противоположное - профиль может иметь только один проект, но проект может иметь много профилей - не уверен, что это было задумано.

views.py

def index(request):

    # get projekt by id:
    projekt = Projekt.objects.get(id=<the-id>)

    template = loader.get_template('stressz/index.html')

    context = {
        'projekt': projekt,
    }
    return HttpResponse(template.render(context, request))

А затем в вашем шаблоне: stressz/index.html

<!-- use context data in template -->
<div> Name: {{projekt.projekt}} </div>

<!-- loop over all profiles in the project -->
{% for profile in projekt.profile_set %}
  <div> User First Name: {{ profile.user.first_name }} </div>
  <div> User Last Name: {{ profile.user.last_name}} </div>
{% endfor %}
Вернуться на верх