Вы можете сделать только CharField, а затем eval
. Однако использование eval
обычно представляет собой огромный риск для безопасности. Любой код python, который входит в него, будет выполнен, и вы не хотите ничего подобного в веб-приложении.
Другой вариант - иметь систему поиска. Вы могли бы, скажем, иметь CharField с вариантами, соответствующими этому словарю:
models.py
...
slug_treatment = models.CharField(max_length=100, choices=function_choices)
...
И затем:
get_data.py
function_lookup = {
"year_month": year_month,
"year_camel_month": year_camel_month
}
processed_slug = function_lookup[data_source.slug_treatment](slug, some_kwargs)
Option Explicit
Sub SplitToMultiWorksheets()
Const cSheets As String = "Sheet1,Sheet2,Sheet3,Sheet4"
Const cStr1 As String = "Are"
Const cStr2 As String = "You"
Const cStr3 As String = "me"
Const cFirstR As Long = 1
Const cCol1 As Variant = "A"
Const cCol2 As Variant = "B"
Const cCol3 As Variant = "C"
Const cCol4 As Variant = "D"
Const cFirst1 As Long = 12
Const cFirst2 As Long = 20
'Const cLast1 As Long = 19
'Const cLast2 As Long = 29
Dim vntSheets As Variant
Dim vnt1(2) As Variant
Dim vnt2(2) As Variant
Dim lastR As Long
Dim i As Long
Dim wsName As String
Dim First1 As Long
Dim First2 As Long
vntSheets = Split(cSheets, ",")
For i = 0 To UBound(vnt1)
vnt1(i) = cFirst1 - 1
vnt2(i) = cFirst2 - 1
Next
With ThisWorkbook.Worksheets(vntSheets(0))
lastR = .Cells(.Rows.Count, cCol1).End(xlUp).Row
For i = cFirstR To lastR
If .Cells(i, cCol1) = cStr1 Then
wsName = vntSheets(.Cells(i, cCol2) - 1)
Select Case .Cells(i, cCol3)
Case cStr2
First1 = vnt1(.Cells(i, cCol2) - 2) + 1
vnt1(.Cells(i, cCol2) - 2) = First1
.Parent.Worksheets(wsName).Cells(First1, cCol3) _
= .Cells(i, cCol4)
Case cStr3
First2 = vnt2(.Cells(i, cCol2) - 2) + 1
vnt2(.Cells(i, cCol2) - 2) = First2
.Parent.Worksheets(wsName).Cells(First2, cCol3) _
= .Cells(i, cCol4)
End Select
End If
Next
End With
End Sub