繁体   English   中英

如何将 CharField 操作为字符串 Django

[英]How to manipulate CharField as a string Django

我有一个字符字段,用户在其中输入一系列数字,这些数字将对应于数字列表。 例如,用户应该能够输入“1、2、3、4、5”或“1-5”,我希望能够将其转换为范围内所有这些数字的列表。 但是,当我在views.py 中获取该字段的clean_data 时,该值的行为不像字符串。 .split() 不会转换为列表,并且 for 循环会遍历单个字符。 如何将字段转换为可用的字符串?

在views.py中:

def my_view(request):
    if request.method == 'POST':
        if form.is_valid():
            nums = form.cleaned_data['numbers']
            nums.split(',')
            num_list = []
            for item in nums:
                if '-' in item:
                    item.split('-')
                    for x in range(item[0], item[1]):
                        num_list.append(x)
                else:
                    num_list.append(item)

如果输入是“1-160”,我会收到一个错误,因为单个字符“-”不能分成两个项目并被索引。 预期的 num_list 是 1 到 160 之间的所有整数的列表。

如果输入是 '1,2,3' num_list 是所有字符的列表,而不仅仅是数字。

split()不能就地工作,它返回一个列表。

这意味着您需要为返回值分配一个变量。

nums = nums.split(',')

def my_view(request):
    if request.method == 'POST':
        if form.is_valid():
            nums = form.cleaned_data['numbers']
            nums = nums.split(',')
            num_list = []
            for item in nums:
                if '-' in item:
                    item.split('-')
                    for x in range(item[0], item[1]):
                        num_list.append(x)
                else:
                    num_list.append(item)

nums.split(',')转换nums的数量,它返回一个字符串列表,所以你应该使用:

def my_view(request):
    if request.method == 'POST':
        if form.is_valid():
            nums = form.cleaned_data['numbers']
            # ↓ assign the list, for example to nums
            nums = nums.split(',')
            num_list = []
            for item in nums:
                if '-' in item:
                    item.split('-')
                    for x in range(item[0], item[1]):
                        num_list.append(x)
                else:
                    num_list.append(item)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM