【发布时间】:2021-11-15 03:40:20
【问题描述】:
我不明白为什么我的原始查询将结果乘以与用户数量一样多的倍数。我正在使用 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))
如果我使用 Django ORM,我会得到相同的结果
profile = Profile.objects.get(user=request.user)
projekt = Profile.objects.filter(projekt=profile.projekt)
models.py
class Viselkedestipus(models.Model):
def __str__(self):
return str(self.user_name)
user_name = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
date = models.DateField(auto_now_add=True, auto_now=False, blank=True)
class Profile(models.Model):
def __str__(self):
return str(self.user)
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True, auto_now=False, blank=True)
projekt = models.ForeignKey(Projekt, on_delete=models.CASCADE, default=1)
class Projekt(models.Model):
def __str__(self):
return str(self.projekt)
projekt = models.TextField(max_length=150)
company_name = models.ForeignKey('Company', on_delete=models.CASCADE, default=1)
date = models.DateField(auto_now_add=True, auto_now=False, blank=True)
【问题讨论】:
-
为什么不使用 Django ORM?如果您共享您的 models.py 文件,我们可以提供帮助。
-
嗨丹尼尔!谢谢,我编辑并放入models.py。我不使用 ORM,因为我不熟悉它。