首页 > 解决方案 > 通过 user_id 从数据库中过滤结果

问题描述

大家好,我几天来一直在尝试解决这个问题,但是我真的不确定我的错误在哪里。我是 django 的新手,已经编码了一年。我有一个模型投资组合,它接收股票代码并通过外键链接到用户。在我的模型中

class Portfolio(models.Model):
         ticker = models.CharField(max_length=15)
         user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='investor', null=True)

        def __str__(self):
             return self.ticker

我的表格是这样的:

class PortfolioForm(forms.ModelForm):
    class Meta():
        model = Portfolio
        fields = ['ticker']
        def __init__(self, user, *args, **kwargs):
            super(PortfolioForm, self).__init__(*args, **kwargs)
            self.fields['ticker'].queryset = Portfolio.objects.filter(user=user)

在我看来:

    if request.method == 'POST':
        form = PortfolioForm(request.POST or None, request.user)
        if form.is_valid():
            ticker = form.save(commit=False)
            ticker.user = request.user
            ticker.save()
            return redirect('/add_stock')
    else:
        ticker = Portfolio.objects.filter(pk = request.user.id)
        output = []
        for ticker_item in ticker:
               output.append(str(ticker))
    return render(request, 'test_app/add_stock.html', {'ticker':ticker, 'output':output})

我希望用户将股票添加到投资组合数据库,但只返回他们添加的股票代码。目前正在将股票添加到数据库中,但没有任何内容返回给用户。此外,添加到数据库的股票可供任何用户查看,而不仅仅是特定的登录用户。我已将 @login_required 添加到特定视图的顶部。我将不胜感激有关此问题的任何帮助。谢谢你们。

标签: django

解决方案


改变这个

ticker = Portfolio.objects.filter(pk = request.user.id)

ticker = Portfolio.objects.filter(user = request.user)

这应该返回当前用户添加的所有代码。


推荐阅读