按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添加到特定视图的顶部。我将不胜感激有关此问题的任何帮助。谢谢大家。

更改此内容

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

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

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

最新更新