Я бы сделал это с интерфейсом IValidatableObject
из System.ComponentModel.DataAnnotations, что позволяет добавлять дополнительные правила проверки, где вы можете сделать гораздо большую проверку. Добавьте интерфейс в свой класс, а затем внедрите метод Validate
, где вы можете сравнить StartDateTime с текущей датой / временем, а также сравнить EndDateTime с StartDateTime, например
public class MyClass : IValidatableObject
{
[Required(ErrorMessage="Start date and time cannot be empty")]
//validate:Must be greater than current date
[DataType(DataType.DateTime)]
public DateTime StartDateTime { get; set; }
[Required(ErrorMessage="End date and time cannot be empty")]
//validate:must be greater than StartDate
[DataType(DataType.DateTime)]
public DateTime EndDateTime { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
List<ValidationResult> results = new List<ValidationResult>();
if (StartDateTime < DateTime.Now)
{
results.Add(new ValidationResult("Start date and time must be greater than current time", new []{"StartDateTime"}));
}
if (EndDateTime <= StartDateTime)
{
results.Add(new ValidationResult("EndDateTime must be greater that StartDateTime", new [] {"EndDateTime"}));
}
return results;
}
}
. только потенциальный недостаток этого заключается в том, что Validate
работает на стороне сервера, а не в проверке jQuery.
Я считаю, что вам нужно разделить с помощью выбора второго значения и, если необходимо, преобразовать в целые числа:
df.region = df.region.str.split('_').str[1].astype(int)
Или использовать extract
с регулярным выражением для извлечения целых чисел:
Образец :
df = pd.DataFrame({'region':['region_1','region_2','region_3']})
df.region = df.region.str.extract('(\d+)', expand=False).astype(int)
print (df)
region
0 1
1 2
2 3