我正在为我的应用程序编写一些Javascript,我需要先将序列化为JSON数据,然后将其返回到HTML模板,以获取对.js
文件的查询集。我遵循了documentation,并认为我是第一次使用它,但是现在我意识到它返回的数据与数据库中的数据不同。
这是我的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序列化的Queryset放入上下文中,该Queryset包含有关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文件中可访问的输出序列化数据为this
乍一看似乎正确,但我注意到即使用户ID正确,字段encrypted_private_key
,public_key
和salt
也不像数据库中的那样。
我现在看起来好像有很多数据,但只是注意到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
的所有用户均具有相同的值,而在数据库中,每个用户均具有不同的值。
我在做什么错了?
答案 0 :(得分:0)
好,所以看起来Django的JSON序列化程序默认将BinaryField
编码为base64格式。这就是为什么序列化数据和数据库中的值完全不同的原因。我希望看到相同的值,但是我想那不是有意义的情况,我只是没有足够快地意识到这一点...