【发布时间】:2021-10-31 02:59:35
【问题描述】:
我有一个视图,我想在选项输入中仅列出与当前项目相关但我不能列出的那些用户。如果不使用 url 中的 project_id,我不知道如何编写仅列出这些用户的查询。我不想在网址中使用projekt_id。
这就是我卡住的地方:
views.py
def kapcsolodasok(request, projekt_id):
if request.method == 'POST':
kap_bar_01 = request.POST.get('kap_bar_01')
kap_bar_02 = request.POST.get('kap_bar_02')
kapcsolodasok = kapcsolodasok(kap_bar_01=kap_bar_01, kap_bar_02=kap_bar_02)
kapcsolodasok.save()
related_users = Profile.objects.raw('SELECT stressz_profile.id, last_name, first_name, stressz_profile.projekt_id FROM stressz_projekt JOIN stressz_profile ON stressz_projekt.id = stressz_profile.projekt_id JOIN auth_user ON auth_user.id = stressz_profile.user_id WHERE stressz_projekt.id = %s', [projekt_id])
//如何将projekt_id替换为request.user的相关projekt_id
context = {
'related_users': related_users,
}
return render(request, 'stressz/kapcsolodasok.html', context)
models.py
class Kapcsolodasok(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)
kap_bar_01 = models.TextField(max_length=200)
kap_bar_02 = models.TextField(max_length=200)
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=3)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
class Projekt(models.Model):
def __str__(self):
return str(self.projekt)
projekt = models.TextField(max_length=150)
date = models.DateField(auto_now_add=True, auto_now=False, blank=True)
html
<form method="POST">
{% csrf_token %}
<div class="container w-25">
<select class="form-select" aria-label="Default select example" name="kap_bar_01" id="kap_bar_01">
<option>Válassz</option>
{% for u in related_users %}
<option>{{ u.last_name }} {{ u.first_name }}</option>
{% endfor %}
</select>
<select class="form-select" aria-label="Default select example" name="kap_bar_02" id="kap_bar_02">
<option>Válassz</option>
{% for u in related_users %}
<option>{{ u.last_name }} {{ u.first_name }}</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-primary w-100">Mentés</button>
</form>
现在它工作正常,但我需要在我没有从 url 获得 projekt_id 的方式上做同样的事情,因为我不想在 url 中使用 projekt_id。我喜欢用原始查询来做,但是怎么做?
【问题讨论】:
-
顺便说一句,如果没有 pk=3 的 Projekt(例如,直接在迁移之后),
default=3可能会让您陷入痛苦的世界。 -
同理,用户的
ForeignKey不应称为user_name... -
感谢 AKX 我忘记将 pk 设置为 1。