- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个更大的基于 Django 的网络应用程序,但我遇到了一个应该返回一些数据的 API View 的阻塞问题。
我的应用程序有一个模型 (mail.models.Message
) 和一个匹配的序列化程序和 View 集。
对于报告功能,我需要获取经过过滤的结果集,并因此创建了一个单独的 rest_framework.views.APIView 用于报告目的。该模型位于一个应用程序中,而报告位于另一个应用程序中。
这是模型:
class Message(models.Model):
class Meta:
ordering = ('-timestamp',)
get_latest_by = 'timestamp'
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
from_address = models.CharField("From", max_length=511, blank=True, default="", db_index=True)
from_domain = models.CharField(max_length=255, blank=True, default="", db_index=True)
to_address = models.CharField("To", max_length=511, blank=True, default="", db_index=True)
to_domain = models.CharField(max_length=255, blank=True, default="", db_index=True)
subject = models.TextField(blank=True, default="", db_index=True)
client_ip = models.GenericIPAddressField("Client IP", db_index=True, null=True)
mailscanner_hostname = models.CharField(max_length=255, db_index=True)
spam_score = models.DecimalField(db_index=True, default=0.00, max_digits=7, decimal_places=2)
mcp_score = models.DecimalField(db_index=True, default=0.00, max_digits=7, decimal_places=2)
timestamp = models.DateTimeField(db_index=True)
size = models.FloatField(default=0)
token = models.CharField(max_length=255, null=True)
mailq_id = models.TextField("Mailqueue identification", null=True)
whitelisted = models.BooleanField(db_index=True, default=False)
blacklisted = models.BooleanField(db_index=True, default=False)
is_spam = models.BooleanField(db_index=True, default=False)
is_mcp = models.BooleanField(db_index=True, default=False)
is_rbl_listed = models.BooleanField("Is RBL listed", db_index=True, default=False)
quarantined = models.BooleanField(db_index=True, default=False)
infected = models.BooleanField(db_index=True, default=False)
released = models.BooleanField(db_index=True, default=False)
def __str__(self):
return str(self.id) + "[" + str(self.from_address) + " to " + str(self.to_address) + "]"
以及匹配的序列化器:
class MessageSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Message
fields = (
'id',
'url',
'from_address',
'from_domain',
'to_address',
'to_domain',
'subject',
'client_ip',
'mailscanner_hostname',
'spam_score',
'timestamp',
'size',
'token',
'whitelisted',
'blacklisted',
'is_spam',
'is_rbl_listed',
'quarantined',
'infected'
)
模型上有很多索引来提高搜索和过滤的性能,但我已经排除了这些。
为了报告,我创建了这个特殊 View :
class MessageListApiView(ReportApiView):
serializer_class = MessageSerializer
queryset = Message.objects.all()
def get_queryset(self):
if self.request.method == 'POST':
filters = self.request.data
return MessageQuerySetFilter.filter(MessageQuerySetFilter, self.queryset, filters)
else:
return self.queryset
def post(self, request, format=None):
filters = request.data
qs = self.get_queryset()
serializer = MessageSerializer(qs, context={'request': request})
return Response(serializer.data, 200)
在 get_queryset
中,我使用了一个特殊的类,该类的唯一目的是对查询集应用适当的过滤并返回它。进行一些测试后,我发现问题发生在我必须返回 Response
时。
我得到这个回溯:
Internal Server Error: /api/reports/messages/
Traceback (most recent call last):
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/django/views/generic/base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/views.py", line 494, in dispatch
response = self.handle_exception(exc)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/views.py", line 454, in handle_exception
self.raise_uncaught_exception(exc)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/views.py", line 491, in dispatch
response = handler(request, *args, **kwargs)
File "/Users/kenneth/Code/mailware/src/reports/views.py", line 44, in post
return Response(serializer.data, 200)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/serializers.py", line 537, in data
ret = super(Serializer, self).data
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/serializers.py", line 262, in data
self._data = self.to_representation(self.instance)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/serializers.py", line 504, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/relations.py", line 376, in to_representation
url = self.get_url(value, self.view_name, request, format)
File "/Users/kenneth/Code/mailware/lib/python3.6/site-packages/rest_framework/relations.py", line 312, in get_url
lookup_value = getattr(obj, self.lookup_field)
AttributeError: 'QuerySet' object has no attribute 'pk'
[19/Jan/2018 20:05:24] "POST /api/reports/messages/ HTTP/1.1" 500 16389
上面的APIView
类继承了一个自定义的基类,也就是继承了rest_framework.views.APIView
类。此类称为 ReportApiView
并简单地设置 paginator_class
和 permission_class
class ReportApiView(APIView):
permission_classes = (IsAuthenticated,)
pagination_class = PageNumberPaginationWithPageCount
在 MessageListApiView
post
方法中 return
行似乎出错了,但我找不到它不起作用的原因
最佳答案
您需要将 many=True
添加到序列化程序查询集中:
serializer = MessageSerializer(qs, many=True, context={'request': request})
关于python - Django REST 框架查询集对象没有属性 pk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348267/
甲骨文: create table t7(c1 number primary key,c2 number); insert into t7 values (1,3); insert into t
谁能告诉我为什么点击模板链接生成的url是/.pk。我想了解 url 是如何工作的。这里是 Django 新手。 Traceback (most recent call last): File "
我有以下 MySQL 触发器。它因 tbl_users 的更新而被触发。如果当天已经存在记录,它将用一些信息更新 tbl_user_stats;如果当天没有记录,它将在 tbl_user_stats
已知:tX_1.name 永远不能为 NULL,长度可变,最多 45 个字符,并且必须始终是唯一的。 哪些因素会影响是否应使用代理 PK 加唯一列(架构 1)或 PK 自然键是否使用第一个表的唯一列作
我有一个包含复合 PK(code_id、user_id)的表,它已经有 100k 条记录。从复合 PK 移动到单个 PK 是否安全,如下例所示? ALTER TABLE orders DROP C
为什么这个模型没有创建 pk 并提示相关模型的 pk 的完整性? 创建 UserProfile 的新实例时,它不会创建主键。 我正在遵循一对一的说明 in this tutorial (这就是所有 @
注意:我是 JPA 开发的新手,正在快速学习试用,所以请原谅我可能遗漏的任何明显内容。 以下是相关的 JPA 实体。地址未列出,但它是一个非常简单的实体,具有一个名为 id 的 @Id。 ShipTo
我们的系统中有两个实体,如下所示: Invoice:[InvoiceID, OrgID] 是表示为 bean 的主键,并使用 @IdClass 注释与 Invoice 相关联 WorkflowStat
场景:我遇到了一些在事务中将 JPA 与 JDBC 混合的代码。 JDBC 正在对基本上是空白行的表执行 INSERT,将主键设置为 (SELECT MAX(PK) + 1) 并将 middleNam
我有一个包含 3 个表的数据库:类别、项目、关系。 categories 包含类别。商品存储在items中,relation是一个绑定(bind)表,它存储了产品id和类别id或类别。 对于给定的项目
问题 当我尝试导入 CSV 文件时,我收到 key “PRIMARY”的重复条目“x-x-xx-x-x-x” - PK 错误。 PK 本身是两个连接的 varchar。据我所知,连接永远不会重复。 我
我正在尝试使用连接从两个大表中进行选择: EXPLAIN SELECT SQL_NO_CACHE e.* FROM `table_A` e JOIN (SELECT id FROM
我有这个 post_list.html 文件:(忽略第二个 'blog:post_detail' url) {% for post in post_list %} {{ post.title }}
我需要使用 JPA 处理现有数据库表。这些表使用复合主键。外键属性与表的主键重叠。 简化示例,每个“订单”都有许多“OrderItems” Table Order
据我所知,每当我在 JPA/Hibernate 实体内的 Long 字段上使用 @Id 和 @GeneratedValue 时,我实际上是在使用代理键,我认为这是定义主键的一种非常好的方式,考虑到我在
所以我有这段代码: request = self.factory.get(reverse('portal-edit-automation', args=(self.rule.id,))) respon
当在MySQL中使用InnoDB存储引擎时,如果在创建表时不指定PRIMARY KEY,则使用隐藏唯一索引作为聚集索引。由于数据字典上的互斥锁,我了解到这些隐藏索引可能会导致争用。 我的问题是 - 如
我正在尝试删除 table1 中与 table2 中具有匹配 PK 的所有行。尽管我的 WHERE 子句使用了键,但我收到错误 1175。我熟悉切换安全模式,但这不应该成为问题,因为我的 WHERE
我正在尝试更新具有外键字段的 View 的记录,因此出现错误,因为我尝试更新没有外键字段的另一个模型并且效果很好。 还有其他类似的问题,但就我而言,我通过了 pk。 urls.py urlpatte
Beeferman 的 PK 和 WindowDIFF 的 Python NLTK 实现从两者的 python segeval 实现中得到完全不同的结果。 使用相同的参数。 hyp: 01001000
我是一名优秀的程序员,十分优秀!