我有两个模型,分别是作者和评论
一个是Comment,它有一个指向Author(BlogUser)的ForeinKey
class Comment(models.Model):
body = models.TextField('body', max_length=500)
created_time = models.DateTimeField('create_time', default=now)
last_mod_time = models.DateTimeField('last_mod_time', default=now)
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='author', on_delete=models.CASCADE)
article = models.ForeignKey(Article, verbose_name='article', on_delete=models.CASCADE)
parent_comment = models.ForeignKey('self', verbose_name="parent_comment", blank=True, null=True, on_delete=models.CASCADE)
is_approved = models.BooleanField('is_approved', default=True, blank=False, null=False)
is_enabled = models.BooleanField('is_enabled', default=True, blank=False, null=False)
is_deleted = models.BooleanField('is_deleted', default=True, blank=False, null=False)
作者模型
class BlogUser(AbstractUser):
qq_number = models.CharField('QQ', max_length=20, default='')
我正在尝试获取与指定文章相关的所有评论,并按照用户名和评论正文的格式显示评论列表。
在视图中,我按文章ID过滤所有评论,但是在序列化过滤器查询集后,它仅给我Author的主要ID,我如何获得其他Author领域呢?我应该自己编写一个函数,还是有一些更简单的方法?
视图:
def get_comment_list(request, article_id):
if request.GET:
comment_list = models.Comment.objects.filter(article_id = article_id)
data = serializers.serialize('json',comment_list)
return HttpResponse(data, content_type="application/json")
else:
PermissionDenied('Not accept post')
答案 0 :(得分:0)
您需要迭代comment_list
并使用成员运算符来访问author
的字段
例如:comment_list[0].author.field_name
注意:字段名称可以是AUTH_USER_MODEL表中已取消的任何字段名称,例如first_name,last_name或username。
答案 1 :(得分:0)
默认情况下,django序列化程序不提供来自ForeignKey的信息。如果您有使用范围,我还建议您使用Django Rest Framework序列化器(注释中提到的Denial Roseman)。
仍然可以使用django序列化程序,但是您将需要覆盖json.Serializer
的{{1}}方法。您可以在其中获取用户对象的值,例如以下示例:
end_object()
该解决方案的缺点是,如果BlogUser与Comment具有相同的字段,则它将获取from django.core.serializers.json import Serializer
class CustomSerializer(Serializer):
def end_object(self, obj):
for field in self.selected_fields:
if field in self._current.keys():
continue
else:
try:
self._current[field] = getattr(obj.author, field) # Fetching the data from ForeignKey
except AttributeError:
pass
super(CustomSerializer, self).end_object(obj)
# usage
data = CustomSerializer().serialize(
Comment.objects.all(),
fields = (
'pk',
# other fields in Comment Object
'username' # it belongs to Author Model
)
的值。
Comment