【问题标题】:How to get the current projct_id in Django如何在 Django 中获取当前的 projct_id
【发布时间】: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。

标签: python sql django


【解决方案1】:

request.user 已经是 Django User 模型的一个实例。因此,您可以使用它。也不清楚为什么需要使用raw。在这种情况下,过滤器会起作用,而且看起来也更好:

profile = Profile.objects.get(user=request.user)
related_users = Profile.objects.filter(projekt=profile.projekt)

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 2011-03-22
    • 1970-01-01
    • 2011-02-22
    • 2019-03-20
    相关资源
    最近更新 更多