我正在开发CakePHP 3.2
我想在查询中使用数组 WHERE IN ()
代码是
$filter_p_t = $this->request->query('p_t');
$pros10 = $this->Products->find()
->where([
'SellerProducts.stock >' => 0,
'SellerProducts.status' => 1,
'Products.p_status' => 1,
])
->contain([
'SellerProducts',
'ProductTypes.Subcategories.Categories',
]);
Run Code Online (Sandbox Code Playgroud)
这$filter_p_t是来自带参数的url的数组
/products/display/1?p_t[]=1&p_t[]=86
Run Code Online (Sandbox Code Playgroud)
我想包括$filter_p_t在where条件中找到所有IN(1,86)
如何在CakePHP 3中使用php数组到WHERE IN条件?
我正在Django 1.11中编写应用程序。
myapp/urls.py 图案看起来像
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth.views import LoginView
urlpatterns = [
url(r'^login/$', LoginView.as_view(), {'redirect_authenticated_user': True}),
url('^', include('django.contrib.auth.urls')),
url('^', include('pages.urls')),
url(r'^pages/', include('pages.urls')),
url(r'^search/', include('search.urls')),
url(r'^admin/', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
我想在尝试访问/login页面时重定向登录用户。为此,我已经按照此处的文档中的设置redirect_authenticated_user进行了设置True
但是,/login成功登录后访问时,它不会重定向。
我在用着CakePHP 3.x+
我必须在页面上显示一个图表,因此想为此构建脚本。
我必须选择当年按月分组的记录数。
这是我尝试过的。
$graph = $this->GenerateVideos->find()
->select('COUNT(id)', 'MONTH(created)')
->where(['YEAR(created)' => date('Y')])
->group(['MONTH(created)']);
Run Code Online (Sandbox Code Playgroud)
它生成像这样的sql
'sql' => 'SELECT GenerateVideos.COUNT(id) AS GenerateVideos__COUNT(`id`) FROM generate_videos GenerateVideos WHERE YEAR(created) = :c0 GROUP BY MONTH(created) ',
'params' => [
':c0' => [
'value' => '2018',
'type' => null,
'placeholder' => 'c0'
]
],
Run Code Online (Sandbox Code Playgroud)
但这给出了错误
Error: SQLSTATE[42000]: Syntax error or access violation:
1064 You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right …Run Code Online (Sandbox Code Playgroud) 我正在使用Django 2.x
我有一个像
class MyModel(models.Model):
name = models.CharField()
balance = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想更改 GET 请求中的 balance 值而不更改数据库中的值。
就像它可能是@Property字段一样,模型看起来像
class MyModel(models.Model):
name = models.CharField()
balance = models.IntegerField()
@property
def balance(self):
if balance:
return balance
return 0.15 * 50
Run Code Online (Sandbox Code Playgroud)
但不允许重新声明。我该如何解决这个问题?
注意:字段应与ModelAdmin和DRF Serializer兼容
我在用着Django 2.2
在制作查询集时,我想要根据以下几个条件计算相关模型的数量
queryset = self.model.objects.filter(user=self.request.user).annotate(
count_videos=Count('video'),
count_completed=Count(
Case(
When(video__status__in=Video.STATUS_LIST_COMPLETED)
)
),
count_failed=Count(
Case(
When(video__status__in=Video.STATUS_LIST_FAILED)
)
),
count_pending=Count(
Case(
When(
video__status__not_in=Video.STATUS_LIST_PENDING_EXCLUDE
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
这里有 3 个计数有效,但在最后一个计数中count_pending,我必须对 进行计数exlude()。即,计算不包括传递列表的记录数。
我如何使用exclude上面的语句?
Django 2.2在QuerySet上提供了一个方法values()来将查询集转换为字典
我在我的应用程序中使用相同的
new_plan_quota = PlanQuota.objects.filter(
**filter_query
).select_related('quota')
new_plan_quota_values = list(new_plan_quota.values())
Run Code Online (Sandbox Code Playgroud)
它生成一个包含PlanQuota模型所有字段的 json 字符串。
模型就像
class PlanQuota(models.Model):
name = models.CharField()
quota = models.ForeignKey(Quota)
Run Code Online (Sandbox Code Playgroud)
如何在 json 中添加配额模型的字段?
我使用 Django 2.0 和 Heroku 来托管该应用程序。
我的媒体目录设置就像
App/settings/production.py:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'media_root')
Run Code Online (Sandbox Code Playgroud)
我正在使用 gTTS 将文本转换为语音并将.mp3文件保存在媒体目录中:
tts_file_name = str(int(time.time())) + '.mp3'
joined_path = os.path.join(settings.MEDIA_ROOT, 'tts')
joined_path_with_file = os.path.join(joined_path, tts_file_name)
# create directory if does not exists
if not os.path.exists(joined_path):
os.makedirs(joined_path)
tts = gTTS(text='Good morning', lang='en')
tts.save(joined_path_with_file)
# tts path to send to template
tts_media_url = os.path.join(settings.MEDIA_URL, 'tts', tts_file_name)
Run Code Online (Sandbox Code Playgroud)
它在本地系统上运行良好,因为我也可以手动更改文件权限。
但它在 Heroku 上不起作用并给出错误:
OSError: [Errno 30] Read-only file system: '/static_cdn'
Run Code Online (Sandbox Code Playgroud)
我尝试static_cdn …
我正在使用Django 2.0和Django REST Framework
我有一个如下所示的模型。
class Contact(models.Model):
first_name = models.CharField(max_length=100)
class AmountGiven(models.Model):
contact = models.ForeignKey(Contact, on_delete=models.PROTECT)
amount = models.FloatField(help_text='Amount given to the contact')
@property
def total_payable(self):
return self.amount
@property
def amount_due(self):
returned_amount = 0
for returned in self.amountreturned_set.all():
returned_amount += returned.amount
return self.total_payable - returned_amount
class AmountReturned(models.Model):
amount_given = models.ForeignKey(AmountGiven, on_delete=models.CASCADE)
amount = models.FloadField()
Run Code Online (Sandbox Code Playgroud)
我必须分别获取amount given和的前 10 位联系人due。
在我看来,我正在过滤数据
@api_view(http_method_names=['GET'])
def top_ten(request):
filter_type = request.query_params.get('type', None)
if filter_type == 'due':
# query for …Run Code Online (Sandbox Code Playgroud) 我正在使用Django 2.x。
我有一个模型user_setting,该模型具有Country在address模块下创建的模型的外键。
现在,我djanog-countries-plus用于添加国家/地区数据,因此更改了user_setting模块,使其现在指向的国家/地区模型django-countries-plus。
from countries_plus.models import Country
from django.contrib.auth.models import User
class UserSetting(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.OneToOneField(User, on_delete=models.CASCADE)
country = models.ForeignKey(Country, on_delete=models.PROTECT, blank=True, null=True, default=None)
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
最初产生的迁移是
# 000_initial
class Migration(migrations.Migration):
initial = True
dependencies = [
('address', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='UserSetting',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), …Run Code Online (Sandbox Code Playgroud) 我在Heroku上托管我的Django应用程序并使用白噪声来处理静态文件。
以下是settings.py的内容
DEBUG = False
ALLOWED_HOSTS += [
'example.com',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
...
]
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static_my_project')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn', 'static_root')
Run Code Online (Sandbox Code Playgroud)
但是静态文件不起作用。
设置Debug=True为静态文件提供服务,但在Debug=False.
django ×8
cakephp ×2
heroku ×2
python ×2
cakephp-3.2 ×1
cakephp-3.x ×1
where-in ×1
whitenoise ×1