我正在为我的应用程序编写一些 Javascript,我需要.js通过首先序列化为 JSON 数据然后将其返回到 HTML 模板来获取我的文件的查询集。我按照文档进行操作,我以为我第一次就可以使用它,但现在我意识到它返回的数据与数据库中的数据不同。
这是我的views.py:
class DetailView(generic.DetailView):
model = Poll
template_name = 'voting/detail.html'
context_object_name = 'question'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
#note this line below
context['data'] = serializers.serialize("json", Profile.objects.filter(user_id=self.request.user))
return context
def get_queryset(self):
"""
Excludes any questions that aren't published yet.
"""
return super(DetailView, self).get_queryset().filter(
eligiblevoters__user=self.request.user,
pub_date__lte=timezone.now()
)
def get(self, request, *args, **kwargs):
try:
return super(DetailView, self).get(request, *args, **kwargs)
except Http404:
return render(request, 'voting/not_invited_to_poll.html', {})
基本上,我将一个 JSON 序列化查询集放入上下文中,其中包含来自 Profile 模型的登录用户的数据。
轮廓模型models.py:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
email_confirmed = models.BooleanField(default=False)
encrypted_private_key = models.BinaryField(max_length=500, blank=True)
public_key = models.BinaryField(max_length=30, blank=True)
salt = models.BinaryField(max_length=16, blank=True)
在我的 HTML 文件中可访问的输出序列化数据是这样
的,起初看起来是正确的,但我注意到即使用户 id 是正确的字段encrypted_private_key,public_key并且salt与数据库中的不同。
从我的数据库中为用户 id 14 导出的相同查询集是这样的:

我现在看起来像很多数据,但只是注意到字段的值encrypted_private_key,public_key并且salt与我在 JSON 中得到的完全不同。
事实上,如果我在我的视图中删除我的表的过滤,如下所示:
class DetailView(generic.DetailView):
model = Poll
template_name = 'voting/detail.html'
context_object_name = 'question'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
#I change the line below to return the whole table
context['data'] = serializers.serialize("json", Profile.objects.all())
return context
def get_queryset(self):
"""
Excludes any questions that aren't published yet.
"""
return super(DetailView, self).get_queryset().filter(
eligiblevoters__user=self.request.user,
pub_date__lte=timezone.now()
)
def get(self, request, *args, **kwargs):
try:
return super(DetailView, self).get(request, *args, **kwargs)
except Http404:
return render(request, 'voting/not_invited_to_poll.html', {})
现在我将整个表重新序列化,我注意到这三个字段对于所有用户(在所有行中)具有相同的值,即使情况并非如此。
在序列化数据中encrypted_private_key,public_key和salt对所有用户具有相同的值,而在数据库中,每个用户具有不同的值。
我究竟做错了什么?