小编bdo*_*leu的帖子

Django在夹具拆卸中测试IntegrityError

我开始使用这个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 …

python django factory-boy

10
推荐指数
1
解决办法
457
查看次数

DRF:从嵌套序列化器验证方法检索外部输入数据

我正在使用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方法访问这些输入数据。有什么建议么?谢谢你的帮助 :)。

django django-rest-framework

8
推荐指数
1
解决办法
829
查看次数

不直接相关的Django预取表

使用以下模型是否可以获取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 …

django

8
推荐指数
1
解决办法
344
查看次数

键入后,FlatList 中的 SearchBar 失去焦点

我正在通过道具使用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)

javascript react-native

7
推荐指数
1
解决办法
775
查看次数

DRF:如何用密码保护 DefaultRouter

您将如何进行保护,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)

python django django-rest-framework

5
推荐指数
1
解决办法
555
查看次数

Python set属性等于另一个属性

是否可以将类属性定位到同一对象的另一个属性,并具有更新目标值的功能?

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)

python

5
推荐指数
1
解决办法
228
查看次数

Axios 不存储 Django 会话 cookie

我的 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_HTTPONLYsettings.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 …

django vue.js axios

5
推荐指数
1
解决办法
2442
查看次数

两个查询集的 Django 联合不适用于带注释的值

我正在尝试将两个查询集与共享字段进行并集。

有效

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)

django

5
推荐指数
0
解决办法
406
查看次数

Javascript创建长度为n的对象数组

是否有一个单线来创建一系列长度的对象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)

javascript

5
推荐指数
1
解决办法
1389
查看次数

Vuelidate 重置特定字段,以便 $error 标志为 false

使用 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)

vue.js vuetify.js vuelidate

5
推荐指数
1
解决办法
4907
查看次数