小编Lon*_*Dev的帖子

Django创建自定义模型字段

我试图在Django中创建一个自定义字段,它将采用十进制货币值(例如:£1.56)并将其作为整数(例如:156)保存在数据库中以存储货币值.

这是我到目前为止(我已经把固定值测试)

class CurrencyField(models.DecimalField):
    __metaclass__ = models.SubfieldBase

    def get_internal_type(self):
        return 'PositiveIntegerField'

    def to_python(self, value):   
        print "CurrentField to_python"

        return Decimal(value)/100

    def get_db_prep_value(self, value, connection, prepared=False):
        print "CurrentField get_db_prep_value"
        if value is None:
            return value

        print type(value)

        return int(value*100)
Run Code Online (Sandbox Code Playgroud)

我遵循Python 1.7文档来创建自定义模型字段.

在上面的代码中,get_db_prep_value当我使用此字段保存模型时,永远不会调用该方法.该to_python方法工作正常(如果我手动输入数据库中的值将返回正确的小数),但它永远不会保存正确的值.

我也尝试过使用get_prep_value,结果相同.

如何保存正确的值?

python django django-models django-forms django-1.7

4
推荐指数
1
解决办法
7912
查看次数

用Jest和Enzyme反应组件的测试状态

我有一个简单的组件,您单击一个按钮,它使用提取来调用API并记录结果:

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {isLoading: false};
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState({isLoading: true});
    return fetch('https://api.github.com/users/londonappdev')
      .then(res => {
        return res.json();
      })
      .then(data => {
        console.log(data);
        this.setState({isLoading: false})
      });
  }

  render() {
    return (
      <div className="App">
        <button onClick={this.handleClick}>Click</button>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我想测试isLoading设置为true当请求正在进行中,然后设置为false一旦请求完成.

我的测试看起来像这样:

it('sets isloading to true while loading', () => {
  global.fetch = jest.fn().mockReturnValue(Promise.resolve({
    ok: true,
    json: () => Promise.resolve({'user': 'test'})
  }));

  const c = …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs jestjs enzyme

4
推荐指数
1
解决办法
1750
查看次数

在Android中隐藏RadioButton

我想将RadioButton的可见性设置为INVISIBLE或GONE.由于某种原因,这是行不通的.

RadioButton myRadioButton = (RadioButton) findViewById(R.id.my_radio_button_id);
myRadioButton.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

要么

myRadioButton.setVisibility(View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)

没有错误返回,它只是没有做任何事情.

不过我在RadioGroup上尝试了这个

RadioGroup myRadioGroup = (RadioGroup) findViewById(R.id.radiogroup_quiz_answers);
myRadioGroup.setVisibility(View.INVISIBLE);
Run Code Online (Sandbox Code Playgroud)

它可以很好地隐藏整个组.有没有办法隐藏其中一个RadioButtons?我有一组3个问题的答案,但在某些情况下我想隐藏最后一个问题.

android android-view

3
推荐指数
1
解决办法
1万
查看次数

Django全局名称'PageNotAnInteger'未定义

我有一个奇怪的问题.我有一个视图,它通过Django REST Framework中的序列化程序和分页器返回一些JSON.

我的视图看起来像这样(返回Countries模型中的所有对象):

@api_view(['GET'])
def country_list(request):
    """
    List all countries
    """
    if request.method == 'GET':

        geoname_ids = request.QUERY_PARAMS.get('geoname_ids')
        queryset = Countries.objects.all()
        paginator = Paginator(queryset, request.QUERY_PARAMS.get('limit'))
        page = request.QUERY_PARAMS.get('page')

        try:
            countries = paginator.page(page)
        except PageNotAnInteger:
            #If page is not an integer, deliver first page.
            countries = paginator.page(1)
        except EmptyPage:
            #If page is out of range
            #Delivery last page of results
            countries = paginator.page(paginator.num_pages)

        serializer_context = {'request': request}
        serializer = PaginatedCountrySerializer(countries, context=serializer_context)
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

这很好用.

但是我需要返回一个具有特定ID的国家/地区,我正在尝试这样做:

@api_view(['GET'])
def country_list(request):
    """
    List …
Run Code Online (Sandbox Code Playgroud)

python django django-views django-rest-framework

3
推荐指数
1
解决办法
2859
查看次数

为什么将自定义传单控件添加为大写和小写?

我正在查看扩展传单文档以添加自定义控件

它包含以下代码片段,作为添加简单水印控件的示例:

L.Control.Watermark = L.Control.extend({
    onAdd: function(map) {
        var img = L.DomUtil.create('img');

        img.src = '../../docs/images/logo.png';
        img.style.width = '200px';

        return img;
    },

    onRemove: function(map) {
        // Nothing to do here
    }
});

L.control.watermark = function(opts) {
    return new L.Control.Watermark(opts);
}

L.control.watermark({ position: 'bottomleft' }).addTo(map);
Run Code Online (Sandbox Code Playgroud)

为什么将控件同时分配给大写(L.Control.Watermark)和小写L.control.watermark变量?扩展JavaScript库时,这是通用约定吗?

javascript leaflet

3
推荐指数
2
解决办法
61
查看次数

在 Vue 3 中将 Tiptap 与 v-model 和 &lt;script setup&gt; 一起使用

我正在尝试将tiptap 与Vue.js 结合使用,并采用<script setup>创建单文件组件(SFC)的方法。

文本编辑器.vue

<template>
  <editor-content :editor="editor" class="editor" />
</template>

<script lang="ts" setup>
import { useEditor, EditorContent } from '@tiptap/vue-3'
import StarterKit from '@tiptap/starter-kit'

const props = defineProps({
  modelValue: {
    type: String,
    default: "",
  }
})

const emit = defineEmits(['update:modelValue'])

const editor = useEditor({
  content: props.modelValue,
  extensions: [StarterKit],
  onUpdate: ({editor}) => {
    let content = editor.getHTML()
    emit('update:modelValue', content)
  }
})
</script>
Run Code Online (Sandbox Code Playgroud)

然后我像这样使用这个组件:

<template>
  <text-editor v-model="myModel.content" />
</template>
Run Code Online (Sandbox Code Playgroud)

这在定义<text-editor>加载时有效。 myModel.content

但是,如果从我的数据库 API 设置了<text-editor>“loads …

vue.js vuejs3 tiptap

3
推荐指数
1
解决办法
2276
查看次数

检查模型以查看Yii-PHP中是否存在记录

我试图使用yii检查数据库表中是否已存在记录.阅读文档说它有一个方法exists()可以使用findByAttributes()find()来代替查找记录.使用较少内存的好处是因为它不必检索记录,只检查它是否存在.

当我尝试实现这样的方法时:

    if (UserRsvp::model()->exists(array("user_id"=>$userId))) {
        echo 'Exists';
    } else {
        echo "Doesn't exist";
    }
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:*CException:未定义属性"CDbCriteria.user_id".*

如果我尝试使用findByAttributes方式它可以正常工作(但我想使用exists()来提高效率)

if(UserRsvp::model()->findByAttributes(array("user_id"=>$userId))) {

  echo 'Exists';
} else {
  echo "Doesn't exist";
}
Run Code Online (Sandbox Code Playgroud)

我是否在使用exists()方法做错了什么?

php mysql yii

2
推荐指数
1
解决办法
1万
查看次数

localForage 使用 WebSQL web IndexedDB 可用

我正在使用 Ionic 框架构建 Cordova 应用程序。我使用angular-localForage作为应用程序持久存储的本地数据库。

在开发过程中,我正在 Windows 10 上使用 Google Chrome 45.0.2454.85 m 测试我的应用程序。angular-localForage 的版本为 1.2.3,localForage 的版本为 1.2.4。

我可以设置和检索数据没问题。要设置我使用的数据:

$localForage.setItem(myKey, myData).then(myCallbackFunction);
Run Code Online (Sandbox Code Playgroud)

根据docs,如果可用,localForage 应该使用 IndexedDB,而对于不可用的浏览器,则回退到 WebSQL。我可以通过查看 Chrome 开发人员工具中的资源看到它正在将我的数据存储在 WebSQL 中。

如果我将此代码放在我的控制器中,我会收到一条消息,指出 IndexedDB 可用:

if (!window.indexedDB) {
    window.alert("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.");
} else {
    window.alert("IndexedDB available.");
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我有 IndexedDB 可用时,为什么它在 Chrome 中使用 WebSQL?

javascript google-chrome indexeddb angularjs localforage

2
推荐指数
1
解决办法
1801
查看次数

使用 jest 测试提交以获取的 FormData

我正在使用 Jest 测试在我的 React 应用程序中调用 API。

我正在测试的代码是:

const createItem = (data) => {
  let formData = buildForm(data);

  return fetch(URL, {
    method: 'POST',
    body: formData
  });
};
Run Code Online (Sandbox Code Playgroud)

我想确认该buildForm函数正确地将 转换dataFormData对象。

我的测试是这样的:

it('creates item using api', () => {
  let data = {name: 'test name'};
  return createItem(data)
    .then(() => {
      let expForm = new FormData();
      expForm.append('name', data.name);

      expect(global.fetch).toHaveBeenCalledWith(URL, {
        method: 'POST',
        body: expForm
      });
    });
});
Run Code Online (Sandbox Code Playgroud)

问题是,无论我expForm在测试中附加了哪些字段,此测试都会通过。似乎toHaveBeenCalledWith实际上并没有比较 的值,body只是检查它是否是一个FormData对象。

如何测试传递给 …

javascript reactjs jestjs

2
推荐指数
1
解决办法
4144
查看次数

为动态添加的HTML分配功能

使用jQuery和JavaScript我正在尝试编写一些设置一个或多个小部件的代码.小部件接受文本,inputulbutton单击a 时将其添加到a .

然后将项目添加到ul,单击侦听器是一个设置,用于在单击时删除特定项目.

代码如下所示:

    function WidgetThing(className) {
    	
      var items = [];
      
      function removeItem(e) {
        var idx = parseInt($(e.target).attr('data-index'));
        items.splice(idx, 1);
        updateItems();
      }
    
    	function updateItems() {
      	var ul = $('.' + className + ' .items ul');
        ul.html('');
      	items.forEach(function(item, idx) {
        	ul.append('<li data-index="' + idx + '">' + item + '</li>');
        });
        ul.on('click', 'li', removeItem);
      }
    
      $('.' + className + ' .add-button').click(function(e) {
      	var input = $('.' + className + ' input');
      	items.push(input.val()); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery

2
推荐指数
1
解决办法
56
查看次数

Django密码= models.CharField(_('密码'),max_length = 128)

下划线在此行中有什么相关性('密码')?

password = models.CharField(_('password'), max_length=128)

我查看了Django文档,并指出模型字段定义中的第一个参数是'详细名称',但是在这种情况下我无法找到下划线的相关性?

我正在查看的整个文件是:https: //github.com/django/django/blob/master/django/contrib/auth/models.py

谢谢,马克

python django django-models

0
推荐指数
1
解决办法
647
查看次数

在Python(Django)中转换时区增加了一个神秘的30分钟

我有一个设置为的datetime对象,2014-02-24 19:00:00+00:00我相信默认设置为UTC(通过Django管理面板).

这次实际上是非洲/约翰内斯堡,所以我把它转换成这样:

local_timezone= pytz.timezone("Africa/Johannesburg")
local_time_start = self.start_time_unix.replace(tzinfo=local_timezone)
Run Code Online (Sandbox Code Playgroud)

这将输出 2014-02-24 19:00:00+01:30

现在我想将其存储为转换后的UTC时区,所以我这样做:

utc_time = local_time_start.astimezone(utc)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这个输出2014-02-24 17:30:00+00:00.应该输出的时间是17:00:00多少30分钟来自何处?

基本上我试图将来自django管理面板的给定输入作为模型time_zone字段的本地时区,但将其存储为UTC.

有没有更好的方法来解决这个问题?Django文档解释了如何转换用户本地时区,但我需要根据模型属性中的时区进行转换.

python django datetime date

0
推荐指数
1
解决办法
497
查看次数