我将PostImage模型中的One至Onefield更改为ForeignKey,并收到上述错误.
以下是更改后的内容:
class PostImage(models.Model):
# post = models.OneToOneField(Post, on_delete=models.CASCADE, related_name='image', null=True)
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='image', null=True)
image = ProcessedImageField(verbose_name=_('image'), s至rage=post_image_s至rage,
upload_至=upload_至_post_image_direc至ry,
width_field='width',
height_field='height',
blank=False, null=True, format='JPEG', options={'quality': 80},
Docker的日志(log)由以下几部分组成:
my-api | Traceback (most recent call last):
my-api | File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
my-api | response = get_response(request)
my-api | File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
my-api | response = wrapped_callback(request, *callback_args, **callback_kwargs)
my-api | File "/usr/local/lib/python3.8/site-packages/django/views/decora至rs/csrf.py", line 54, in wrapped_view
my-api | return view_func(*args, **kwargs)
my-api | File "/usr/local/lib/python3.8/site-packages/django/views/generic/base.py", line 70, in view
my-api | return self.dispatch(request, *args, **kwargs)
my-api | File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
my-api | response = self.handle_exception(exc)
my-api | File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
my-api | self.raise_uncaught_exception(exc)
my-api | File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
my-api | raise exc
my-api | File "/usr/local/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
my-api | response = handler(request, *args, **kwargs)
my-api | File "/opt/my-api-core/my_posts/views/posts/views.py", line 55, in get
my-api | return self.get_posts_for_authenticated_user(request)
my-api | File "/opt/my-api-core/my_posts/views/posts/views.py", line 92, in get_posts_for_authenticated_user
my-api | post_serializer_data = AuthenticatedUserPostSerializer(posts, many=True, context={"request": request}).data
my-api | File "/usr/local/lib/python3.8/site-packages/rest_framework/serializers.py", line 768, in data
my-api | ret = super().data
my-api | File "/usr/local/lib/python3.8/site-packages/rest_framework/serializers.py", line 253, in data
my-api | self._data = self.至_representation(self.instance)
my-api | File "/usr/local/lib/python3.8/site-packages/rest_framework/serializers.py", line 686, in 至_representation
my-api | return [
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 280, in __iter__
my-api | self._fetch_all()
my-api | File "/usr/local/lib/python3.8/site-packages/cacheops/query.py", line 273, in _fetch_all
my-api | return self._no_monkey._fetch_all(self)
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1324, in _fetch_all
my-api | self._result_cache = list(self._iterable_class(self))
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 51, in __iter__
my-api | results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1156, in execute_sql
my-api | sql, params = self.as_sql()
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 507, in as_sql
my-api | extra_select, order_by, group_by = self.pre_sql_setup()
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 55, in pre_sql_setup
my-api | self.setup_query()
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 46, in setup_query
my-api | self.select, self.klass_info, self.annotation_col_map = self.get_select()
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 227, in get_select
my-api | cols = self.get_default_columns()
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 671, in get_default_columns
my-api | only_load = self.deferred_至_columns()
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1096, in deferred_至_columns
my-api | self.query.deferred_至_data(columns, self.query.get_loaded_field_names_cb)
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 754, in deferred_至_data
my-api | callback(target, model, values)
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 2179, in get_loaded_field_names_cb
my-api | target[model] = {f.attname for f in fields}
my-api | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/query.py", line 2179, in <setcomp>
my-api | target[model] = {f.attname for f in fields}
my-api | AttributeError: 'ManyToOneRel' object has no attribute 'attname'
django.server ERROR "GET /api/posts/?count=10& HTTP/1.1" 500 195670
根据上述日志(log),导致错误的函数:
def get_posts_for_authenticated_user(self, request):
query_params = request.query_params.dict()
normalize_list_value_in_request_data('circle_id', query_params)
normalize_list_value_in_request_data('list_id', query_params)
serializer = GetPostsSerializer(data=query_params)
serializer.is_valid(raise_exception=True)
data = serializer.validated_data
circles_ids = data.get('circle_id')
lists_ids = data.get('list_id')
max_id = data.get('max_id')
min_id = data.get('min_id')
count = data.get('count', 10)
username = data.get('username')
user = request.user
if username:
if username == user.username:
posts = user.get_posts(max_id=max_id)
else:
posts = user.get_posts_for_user_with_username(username, max_id=max_id, min_id=min_id)
else:
posts = user.get_timeline_posts(
circles_ids=circles_ids,
lists_ids=lists_ids,
max_id=max_id,
min_id=min_id,
count=count
)
posts = posts.order_by('-id')[:count]
post_serializer_data = AuthenticatedUserPostSerializer(posts, many=True, context={"request": request}).data
return Response(post_serializer_data, status=status.HTTP_200_OK)
我try 了以下几点:
1.将Order_by()从
posts = posts.order_by('-id')[:count]
至
posts = posts.order_by('-created')[:count]
因为 docker 日志(log)里提到了伯爵.但是仍然得到了上述错误.
2.我甚至try 使用flush命令清除数据库.重新创建了 docker 集装箱.错误仍然存在.