我已经按照Docker站点上的Django Quick Start说明严格设置了Docker Django/PostgreSQL应用程序.
我第一次运行Django的manage.py migrate,使用该命令sudo docker-compose run web python manage.py migrate,它按预期工作.数据库是在Docker PostgreSQL容器内构建的.
Django应用程序本身的更改同样反映在Docker Django容器中,我保存它们的那一刻.这很棒!
但是如果我然后在Django中更改模型,并尝试更新Postgres数据库以匹配模型,则不会检测到任何更改,因此无论我运行多少次makemigrations或migrate再次运行都不会发生迁移.
基本上,每次我更改Django模型时,我都必须删除Docker容器(使用sudo docker-compose rm)并重新启动新的迁移.
我仍然试图让我的头围绕Docker,并且有很多我不明白它是如何工作的,但是这个让我疯狂.为什么不迁移看到我的更改?我究竟做错了什么?
在Django Rest Framework中,如何在串行器嵌套在另一个串行器中时对其进行过滤?
我的过滤器强加在DRF视图集中,但是当您从另一个序列化程序中调用序列化程序时,嵌套序列化程序的视图集永远不会被调用,因此嵌套结果显示为未过滤.
我尝试在原始视图集上添加过滤器,但它似乎不会过滤嵌套结果,因为嵌套结果会被调用为单独的预先查询.(你看,嵌套的序列化器是反向查找.)
是否可以在嵌套的序列化程序本身中添加get_queryset()覆盖(将其移出视图集),以在那里添加过滤器?我也尝试过,没有运气.
这是我尝试过的,但它似乎甚至没有被调用:
class QuestionnaireSerializer(serializers.ModelSerializer):
edition = EditionSerializer(read_only=True)
company = serializers.StringRelatedField(read_only=True)
class Meta:
model = Questionnaire
def get_queryset(self):
query = super(QuestionnaireSerializer, self).get_queryset(instance)
if not self.request.user.is_staff:
query = query.filter(user=self.request.user, edition__hide=False)
return query
Run Code Online (Sandbox Code Playgroud) 我刚刚将一个应用程序从 Angular 11.2.7 迁移到 Angular 12。一切运行良好,除了当我开发和使用“ng serve”时,重建时间现在要慢得多,以至于令人沮丧。
我在 M1 iMac 上,使用节点 16.1.0,这是值得的。
在我转向 Angular 12 之前,机器在开发重建(亚秒级)时闪电般快速。现在如果我只更改一行代码,即使我只更改控制台日志中的一个字母,构建时间为 23 秒,大约 22其中的几秒钟被“阶段:密封”占用。
我还注意到,即使在 ng 服务时,现在一切都从缩小的“main.js”运行。我似乎记得版本 11 没有这样做,但在开发过程中运行了单个未缩小的组件。也就是说,ng每次我更改任何内容时,服务现在似乎都在做一些完整的生产构建。我认为这是缓慢的根本原因,但我不确定。
所以 。. .
在 Angular 12 中,我还应该使用 'ng serve' 进行开发吗?
迁移时是否需要设置一个选项,也许是关闭完全缩小的重建,以保持旧的构建速度?
无论如何,这个“密封阶段”是什么?对我来说,这听起来像是一个生产构建术语!
谢谢
约翰
在Django Rest Framework 2.x中,您可以访问序列化程序中的"fields"查询参数,例如:
fields = self.context['request'].QUERY_PARAMS.get('fields')
Run Code Online (Sandbox Code Playgroud)
这在DRF 3.0中不再有效,但除了一般术语之外,我无法找到API中记录的更改.看起来它可能是类似self.context.get('request')?????但我无法弄明白.
你会如何在DRF 3.0中做到这一点?我说的是在序列化程序中而不是在视图中访问query.params .
谢谢
约翰
在旧的 Android 视图范例中,视图可以侦听 MotionEvent,而不消耗它们。DispatchTouchEvent或者OnTouchEvent可以简单地返回“false”,并且 MotionEvent 将穿过一层又一层的视图,直到返回“true”,此时 MotionEvent 被消耗并且永远不会传递到较低级别的视图。
如何在 Jetpack Compose (JC) 中做到这一点?
JC 触摸监听器Modifier.pointerInteropFilter消耗它检测到的每个 MotionEvent,并且无论它返回“true”还是“false”,都不会向下传递 MotionEvent。(这对我来说感觉像是一个错误,但这是我们必须处理的问题。)
当 JC 侦听器检测到一系列与他们正在查找的事件相匹配的事件时,它们都会消耗其输入事件Modifier.pointerInput.detectDragGestures。Modifier.pointerInput.detectTapGestures
例如,这使得很难(但肯定不是不可能?)有条件地使用由笔创建的输入事件,但如果是由笔创建的,则将该事件传递到下一个可组合项(甚至是同一可组合项中的下一个侦听器)通过一根手指。
同样的问题在这里被问到,在狭义上,但它从未得到回答,OP 似乎仍然在努力解决这个限制。
我能想到解决此错误/限制的唯一方法是将 MotionEvent 手动传递到其他可组合项。
在旧的视图范例中,您可以手动定位视图的onTouchEvent方法,并将 MotionEvent 直接传递给该视图进行处理。这很好,因为例如,您可以有条件地将手指触摸传递到 View,然后 View 会处理自己的滚动,但拦截所有笔触摸并使用它们进行绘制而不是滚动。
但是,到底如何将输入事件直接传递给位于另一个可组合项下方的可组合项呢?或者,假设我必须在一个巨大的可组合项中而不是在可组合项的层中完成所有这些操作,那么如何在可组合项内传递触摸事件呢?
我对这两种解决方案都很满意:首先不消耗输入事件/MotionEvents,然后让它们传递下去,直到有人需要它们为止;或手动传递它们。
但我也不知道该怎么做!
我也会对一个答案感到满意,告诉我我错误地将视图风格的思维引入可组合项,但是当涉及到有条件地使用输入事件和修饰符时,您能否概述一下我应该如何思考(在示例中我pointerInput)一直在使用)要么在可组合项上绘制,要么滚动它?
是否有相当于 Python 的 super() 功能,您可以在其中检测(例如)拖动手势,如果是手指拖动,则执行可组合项的默认操作(即滚动)?
我有一个使用Django选择字段的模型,如下所示:
class Question(models.Model):
QUESTION_TYPES = (
(10,'Blurb'),
(20,'Group Header'),
(21,'Group Footer'),
(30,'Sub-Group Header'),
(31,'Sub-Group Footer'),
(50,'Save Button'),
(100,'Standard Question'),
(105,'Text-Area Question'),
(110,'Multiple-Choice Question'),
(120,'Standard Sub-Question'),
(130,'Multiple-Choice Sub-Question')
)
type = models.IntegerField(default=100,choices=QUESTION_TYPES)
Run Code Online (Sandbox Code Playgroud)
我正在使用Django Rest Framework将此模型作为API呈现给Angular Web应用程序.在我的Angular Web应用程序中,我想要一个组合框小部件,随着所有这些选择而下降.不是整数,而是文本选择,如"blurb","标准问题"等.
现在,我可以将组合框手动编写到Angular应用程序中,但是根据DRY的精神,是否可以编写一个只返回这些选项的DRF序列化程序(即QUESTION_TYPES对象),这样我就可以用一个组合框来填充ReST查询?
而"可能",我想我的意思是"简单而优雅".也许我的意思是"ReSTful".(以这种方式这样做是否很重要?)
就是想 ...
谢谢
约翰
我编写了我的整个Angular应用程序,以避免使用$ scope,而是使用"controller as"语法,以帮助简化向Angular 2.0的过渡,因为我相信这是更现行的做法.
但我无法弄清楚如何避免在ui-grid的gridApi.edit.on.afterCellEdit事件中使用$ scope,其记录如下:
gridApi.edit.on.afterCellEdit(scope,function(rowEntity, colDef){})
Parameters
rowEntity – {object} – the options.data element that was edited
colDef – {object} – the column that was edited
newValue – {object} – new value
oldValue – {object} – old value
Run Code Online (Sandbox Code Playgroud)
基于我已经完成的文档,它可以工作(在将$ scope注入控制器之后):
ctrl.tableOptions.onRegisterApi = function(gridApi){
ctrl.gridApi = gridApi;
gridApi.edit.on.afterCellEdit( $scope, function(rowEntity,colDef, newValue, oldValue) {
//save stuff here
});
};
Run Code Online (Sandbox Code Playgroud)
但是你可以看到我必须在事件的回调中使用$ scope,否则我会收到一个告诉我范围的错误.$ on不是一个函数.是否可以不使用$ scope?我试过"这个",但似乎只想要美元范围.
显然,我真的不明白我在做什么,而且除了这个以及我在上面盲目遵循的例子之外,我找不到关于afterCellEdit的更多文档,所以我转向你寻求帮助.成千上万的无范围代码行,在最后一道障碍中摔倒似乎是一种耻辱!
提前致谢
约翰
我正在尝试做一个包含LEFT JOIN ON (condition) AND (condition)它的Django ORM查询.但是我不知道怎么做额外的事情AND condition,很长很长的路要走掉了JOIN.
添加具有第二个条件的Django过滤器没有帮助 - 它最终在最后作为WHERE子句而不是JOIN中的AND子句.
是否可以在ORM中加入ON条件和条件,或者我应该只使用SQL语句?如果有可能,你怎么做?
对于它的价值,这是我试图转换为Django的SQL查询:
SELECT
`editions_edition`.`name` AS edition,
etc
FROM
`editions_edition`
INNER JOIN `surveys_survey`
ON (`editions_edition`.`survey_id` = `surveys_survey`.`id`)
INNER JOIN `questions_question`
ON (`surveys_survey`.`id` = `questions_question`.`survey_id`)
INNER JOIN `questionnaires_questionnaire`
ON(`editions_edition`.`id`=`questionnaires_questionnaire`.`edition_id`)
INNER JOIN `entities_entity`
ON (`entities_entity`.`id` = `questionnaires_questionnaire`.`entity_id`)
LEFT JOIN `answers_answer`
ON (`answers_answer`.`question_id` = `questions_question`.`id`)
AND (`answers_answer`.`questionnaire_id` =`questionnaires_questionnaire`.`id`)
WHERE `editions_edition`.`id` = *VARIABLE HERE*
AND `questions_question`.`type` > 99
ORDER BY `entities_entity`.`name` ASC,`questions_question`.`sort_order` ASC;
Run Code Online (Sandbox Code Playgroud)
这是LEFT JOIN让我感到难过.
我的Django查询是这样的:
query = Edition.objects
.filter(questionnaires__edition__survey__questions__type__gte=100) …Run Code Online (Sandbox Code Playgroud) 在 Jetpack Compose 应用程序中,我有一个缩略图的 LazyVerticalGrid,每个缩略图都需要在撰写时在位图支持的 Canvas 中绘制。
如果我只是在Canvas的DrawScope中绘制缩略图,则可以正确绘制缩略图,但用户体验很差。当用户滚动 LazyVerticalGrid 时,每个缩略图都会自行绘制,因此会出现很多卡顿。
我原以为 Jetpack Compose 在需要时会在后台线程中进行组合,但这一切似乎都发生在主线程上,导致严重的卡顿,即使在最新的手机上也是如此。
我可以通过使用 LaunchedEffect withContext(IO) 在另一个线程上绘制 Canvas 的底层位图来解决卡顿问题。但问题是,Compose 不知道在绘制位图时重新组合 Canvas,所以我经常会得到半绘制的缩略图。
有没有办法在主线程之外完成工作,然后在工作完成后重新组合?
这是 janky 代码(为简洁起见进行了编辑),后面是非 janky 版本,绘图完成后并不总是重新组合:
val imageBitmap = remember {Bitmap.createBitmap(515, 618, Bitmap.Config.ARGB_8888)}
val bitmapCanvas = remember { android.graphics.Canvas(imageBitmap) }
ElevatedCard() {
Canvas() {
bitmapCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
penStrokes.forEach {
inker.drawEvent(it)
}
this.drawImage(imageBitmap.asImageBitmap())
}
}
Run Code Online (Sandbox Code Playgroud)
不卡顿但仍然不对
val imageBitmap = remember {Bitmap.createBitmap(515, 618, Bitmap.Config.ARGB_8888)}
val bitmapCanvas = remember { android.graphics.Canvas(imageBitmap) }
LaunchedEffect(Unit) {
withContext(IO) {
bitmapCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR)
penStrokes.forEach {
inker.drawEvent(it)
} …Run Code Online (Sandbox Code Playgroud) 在 Django Rest Framework 3 中,我想返回 pk 关系的 unicode 值,就像使用 serializer.StringRelatedField 一样,但我也需要该值可写。StringRelatedField 是只读的。
我不关心 API 是否接受 PUT 上的 pk 或字符串值(尽管接受字符串会很漂亮,并且可以节省我获取所有 pk 的时间!)。API 只需要在 GET 上返回 unicode 字符串值。
我认为 PrimaryKeyRelatedField 可能是可行的方法,但是查询是什么样的?
例如,如果我想要的模型是“Model”,并且我想要序列化 Model.name,那么这个命令是什么样的:
name = serializers.PrimaryKeyRelatedField(queryset=Model.objects.get(pk=????))
Run Code Online (Sandbox Code Playgroud)
我很挣扎,因为我不知道如何从序列化器对象中获取 pk 以便查询相关模型......
当然,这是假设 PrimaryKeyRelatedField 是我所需要的。这可能是完全错误的。
谢谢
约翰
以下是根据要求提供的示例模型,为了清晰起见,略有更改:
class CarModel(models.Model):
name = models.CharField(max_length=100,unique=True)
def __str__(self):
return self.name
class Car(models.Model):
name = models.CharField(max_length=100)
make = models.ForeignKey(CarMake)
car_model = models.ForeignKey(CarModel)
class CarSerializer(serializers.ModelSerializer):
car_model = serializers.StringRelatedField() //like this, but read/write
class Meta:
model = Car
Run Code Online (Sandbox Code Playgroud)
在此示例中,我正在序列化 Car,尝试返回 …
我正在尝试创建只有员工的Django Rest Framework ModelViewSets.当我尝试使用标准的Django装饰器时,@staff_member_required我得到的错误让我相信装饰器不能与Django Rest Framework一起使用.
所以我正在尝试编写自己的ModelViewSet mixin.它主要按我的意思工作,除了我无法工作的更新方法.
所以,有两个问题:是否有更优雅的方法来实现这一点,如果没有,我的更新方法有什么问题?我找不到任何关于更新的文档,所以我正在使用我最好的猜测如何超级它,但它不起作用.
谢谢!
约翰
这是我的班级:
class StaffOnlyModelViewSet(viewsets.ModelViewSet):
def list(self, request):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).list(request)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def retrieve(self, request, pk=None):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).retrieve(request, pk=None)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def create(self, request):
if self.request.user.is_staff:
return super(StaffOnlyModelViewSet, self).create(request)
else:
content = {'Unauthorised': 'This API is private'}
return Response(content, status=status.HTTP_401_UNAUTHORIZED)
def update(self, request, pk=None):
if …Run Code Online (Sandbox Code Playgroud) 我的Kotlin Android应用程序中有以下FileFilter:
fileArray = fileDirectory.listFiles { file, filename ->
file.length() > 0 && filename.matches(fileMatcherRegex)
}
Run Code Online (Sandbox Code Playgroud)
它可以在文件名匹配器上正确过滤,但不会过滤出长度为0的文件。稍后,我遍历fileArray并记录每个文件的长度,我看到长度为0。
奇怪的是,如果我改变了file.length() > 0,比方说,file.length() > 999999999999,它过滤掉所有的文件,所以过滤器的长度()元素正在测试。我所理解的只是没有产生结果。
我究竟做错了什么?
我仍然对Kotlin lambdas有所了解,所以我猜我的错误与此有关。
提前致谢
约翰