我开始使用这个factory_boy包,所以我建立了一些工厂,并想测试创建的对象不会引发任何验证错误。
这是我正在使用的 mixin,它基本上从一个模块中获取每个工厂,创建一个实例,然后测试从.full_clean(). 加载的用户设备是 ID 为 1 到 10 的 10 个实例。
class FactoriesTestCaseMixin:
fixtures = [
'user/tests/fixtures/user.json',
]
module = None
def test_factories(self):
err_msg = '{name} caused errors:\n{errors}'
factories = [
(name, obj) for name, obj in inspect.getmembers(self.module, inspect.isclass)
if obj.__module__ == self.module.__name__
and not obj._meta.abstract
]
for factory in factories:
name = factory[0]
instance = factory[1]()
errors = None
try:
instance.full_clean()
except ValidationError as e:
errors = e
self.assertTrue(errors is None, err_msg.format(name=name, errors=errors))
Run Code Online (Sandbox Code Playgroud)
mixin …
我正在使用Django-Rest-Framework的序列化器。我有两个串行器,一个与另一个嵌套。
class NestedSerializer(serializers.Serializer):
value = AttributeValueField(required=True)
name = serializers.CharField(required=True)
class OuterSerializer(serializers.Serializer):
info = serializers.CharField()
nested = NestedSerializer()
Run Code Online (Sandbox Code Playgroud)
为了验证嵌套序列化器的数据,我需要从父序列化器中检索输入数据,如下所示:
class NestedSerializer(serializers.Serializer):
...
def validate(self, data):
# of course, it doesn't work, but thats the idea.
info = self.parent.info
# then validate the NestedSerializer with info.
Run Code Online (Sandbox Code Playgroud)
我找不到任何方法可以通过validate方法访问这些输入数据。有什么建议么?谢谢你的帮助 :)。
使用以下模型是否可以获取Category对象并预取OrderLine以便它可以被访问category.orderlines.all()?
class Category(models.Model):
name = models.CharField(...)
class Product(models.Model):
category = models.ForeignKey(Category, related_name='products', ...)
name = models.CharField(...)
price = models.DecimalField(...)
class OrderLine(models.Model):
product = models.ForeignKey(Product, related_name='orderlines', ...)
Run Code Online (Sandbox Code Playgroud)
我知道您可以通过产品进行嵌套预取,但我想OrderLine直接从 a访问对象Category而不是通过Product
from django.db.models import Prefetch
categories = Category.objects.prefetch_related(Prefetch(
'products__orderlines',
queryset=OrderLine.objects.filter(...)
))
for category in categories:
for product in category.products.all():
for line in product.orderlines.all():
...
Run Code Online (Sandbox Code Playgroud)
预期用途:
for category in categories:
for line in category.orderlines.all():
...
Run Code Online (Sandbox Code Playgroud)
更新
添加to_attr='orderlines'结果:
ValueError: to_attr=orderlines 与 Product …
我正在通过道具使用SearchBar组件并根据搜索值过滤项目列表。问题是,在输入一个字符后,搜索栏失去焦点(键盘被移除)——这几乎就像组件重新渲染一样?我在这里缺少什么?FlastListListHeaderComponent
我使用的是Android的,如果我移动不发生问题SearchBar的外部FlatList。
import React from 'react'
import {FlatList, View} from 'react-native'
import { ListItem, SearchBar } from 'react-native-elements'
export const Component = (props) => {
const [search, setSearch] = React.useState('');
const [items, setItems] = React.useState([
{ id: 1, name: 'One Thousand' },
{ id: 2, name: 'Two Hundred' },
]);
const filterItems = (items, filter) => {
return items.filter(item => item.name.toLowerCase().includes(filter.toLowerCase()))
}
const renderHeader = () => (
<SearchBar
placeholder='Search...'
onChangeText={setSearch}
value={search} …Run Code Online (Sandbox Code Playgroud) 您将如何进行保护,DefaultRouter()以便用户在登录之前无法查看 API Root?
class OrderViewSet(viewsets.ReadOnlyModelViewSet):
permission_classes = (permissions.IsAuthenticated)
queryset = Order.objects.all()
serializer_class = OrderSerializer
router = routers.DefaultRouter()
router.register(r'orders', views.OrderViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^auth/', include('rest_framework.urls')),
]
Run Code Online (Sandbox Code Playgroud)
项目.urls.py
# API
url(r'^api/', include(api_urls)),
Run Code Online (Sandbox Code Playgroud) 是否可以将类属性定位到同一对象的另一个属性,并具有更新目标值的功能?
class MyObject(object):
def __init__(self):
self.var_1 = 1
self.var_2 = 2
self.var_3 = 3
self.current_var = self.var_1
def update_var(self, value):
self.current_var = ...
Run Code Online (Sandbox Code Playgroud)
预期结果:
>>> x = MyObject()
>>> x.update_var(10)
>>> x.var_1
10
>>> x.current_var = x.var_2
>>> x.update_var(5)
>>> x.var_2
5
Run Code Online (Sandbox Code Playgroud) 我的 Vue 应用程序有一个 Django REST Framework API 后端。我正在尝试对匿名用户使用 Django 会话,但 Django 不发送或 Axios 无法读取会话 cookie。
通过检查正在创建一个新会话Session.objects.all().count()
我正在尝试存储用于经过JWTAuthentication身份验证的用户和SessionAuthentication匿名用户的购物车数据。
# settings.py
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
'localhost:8080',
'127.0.0.1:8080',
)
SESSION_COOKIE_HTTPONLY = False
Run Code Online (Sandbox Code Playgroud)
我尝试过切换SESSION_COOKIE_HTTPONLY,settings.py但仍然看不到 cookie。
拦截响应时,会发送 CSRF cookie,但不包含会话 cookie。
import axios from 'axios'
import Cookie from 'js-cookie'
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = 'X-CSRFToken'
axios.defaults.withCredentials = true
axios.interceptors.response.use(response => {
const sessionCookie = Cookie.get()
console.log('Cookie', sessionCookie)
return response
})
Run Code Online (Sandbox Code Playgroud)
在我的 DRF API 测试中,我可以看到会话 cookie …
我正在尝试将两个查询集与共享字段进行并集。
这有效:
fields = ['id', 'date_trans', 'total', 'allocated', 'balance']
qs1 = Order.objects.values_list(*fields)
qs2 = OnAccount.objects.values_list(*fields)
return qs1.union(qs2)
Run Code Online (Sandbox Code Playgroud)
该Order模型有一个CharField调用num_invoice,我想将其作为一个字段包含在联合中。该字段在模型中不存在OnAccount,因此为了将其包含在values_list()我正在使用注释中。
注释工作正常,但联合会导致错误:
django.db.utils.ProgrammingError: UNION types character varying and date cannot be matched
Run Code Online (Sandbox Code Playgroud)
这是我的注释和不起作用的联合:
from django.db.models import CharField, Values as V
from django.db.models.functions import Concat
fields = ['id', 'num_invoice', 'date_trans', 'total', 'allocated', 'balance']
qs1 = Order.objects.values_list(*fields)
qs2 = (
OnAccount.objects
.annotate(num_invoice=Concat(V('OA-'), 'id', output_field=CharField()))
.values_list(*fields)
)
return qs1.union(qs2)
Run Code Online (Sandbox Code Playgroud)
更新信息
>>> qs1.model._meta.get_field('num_invoice')
<django.db.models.fields.CharField: …Run Code Online (Sandbox Code Playgroud) 是否有一个单线来创建一系列长度的对象n?
const arr = [
{ first_name: '', last_name: '' },
{ first_name: '', last_name: '' },
{ first_name: '', last_name: '' },
]
Run Code Online (Sandbox Code Playgroud)
我在下面尝试过,但我得到了 SyntaxError: unexpected token: ':'
const arr = [...Array(3).map(x => { first_name: '', last_name: '' })]
Run Code Online (Sandbox Code Playgroud) 使用 Vuelidate,您可以使用this.$v.$reset(). 在此Codepen 示例中,重置lastName使用 Vuetify 组件的字段有效 -设置为 false$invalid时$error为 true。
重置常规文本输入firstName时不起作用,因为该$error标志仍然为真。如何修改文本输入,以便在调用重置时 $error 为 false?
我也试过,this.$nextTick(() => {...})但这也不起作用。
Vue.use(window.vuelidate.default)
var validationMixin = window.vuelidate.validationMixin
const {
maxLength,
required
} = window.validators
new Vue({
el: '#app',
mixins: [validationMixin],
data: () => ({
form: {
firstName: '',
lastName: ''
}
}),
validations: {
form: {
firstName: {
required, maxLength: maxLength(2)
},
lastName: {
required, maxLength: maxLength(2)
},
}
} …Run Code Online (Sandbox Code Playgroud)django ×6
python ×3
javascript ×2
vue.js ×2
axios ×1
factory-boy ×1
react-native ×1
vuelidate ×1
vuetify.js ×1