簡體   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