Довольно часто, когда я создаю файл XML из данных, хранящихся в классе, я часто получал ошибки, если атрибут не существовал или имел тип None
. В этом случае моя проблема не зная, что такое имя атрибута, как указано в вашем вопросе, а скорее данные, хранящиеся в этом атрибуте.
class Pet:
def __init__(self):
self.hair = None
self.color = None
Если я использовал hasattr
для сделайте это, он вернет True
, даже если значение атрибута имеет тип None
, и это приведет к ошибке моей команды ElementTree set
.
hasattr(temp, 'hair')
>>True
Если значение атрибута имело тип None
, getattr
также вернет его, что приведет к сбою моей команды ElementTree set
.
c = getattr(temp, 'hair')
type(c)
>> NoneType
Теперь я использую следующий метод, чтобы позаботиться об этих случаях:
def getRealAttr(class_obj, class_attr, default = ''):
temp = getattr(class_obj, class_attr, default)
if temp is None:
temp = default
elif type(temp) != str:
temp = str(temp)
return temp
Это когда и как я использую getattr
.
СУХОЙ (не повторяйся)
Я не на 100% уверен, что правильно выполнил комбо, но я бы использовал этот метод
Не нужно устанавливать отключенное, Я просто запускаю изменение нагрузки
$('#ordersdetailID_portion').on('change', function() {
var pl1 = +this.value, // partyloafportionID
$weight = $('#ordersdetailpartyloafweightID');
$('option[value="1"]',$weight).prop('disabled', pl1 != 1);
$('option[value="2"]',$weight).prop('disabled', pl1 != 2);
$('option[value="3"]',$weight).prop('disabled', pl1 != 3);
$('option[value="4"]',$weight).prop('disabled', pl1 != 4 && pl1 != 5);
$('option[value="5"]',$weight).prop('disabled', pl1 != 4 && pl1 != 5);
}).change();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="ordersdetailID_portion" name="child-ID_portion" class="form-control select2 select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
<option value="">** Veuillez saisir une option Nombre de sandwiches</option>
<option value="4">100</option>
<option value="1">30</option>
<option value="2">60</option>
<option value="3">80</option>
</select>
<select id="ordersdetailpartyloafweightID" name="child-partyloafweightID" class="form-control select2 select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
<option value="">** Please choose the appropriate weight</option>
<option value="2">1 Kg</option>
<option value="3">1.5 Kg</option>
<option value="4">2 Kg</option>
<option value="5">2.5 Kg</option>
<option value="1">600 g</option>
</select>
Ваш код document.getElementById('ordersdetailID_portion').value;
возвращает string
, но вы проверяете номер.
Кроме того, при каждом изменении необходимо сначала сбросить все опции disabled
до false
. Проверьте код ниже:
$('form').on('change', function() {
$('#ordersdetailpartyloafweightID option').prop('disabled', false);
var pl1 = document.getElementById('ordersdetailID_portion').value; // partyloafportionID
if (pl1 == "1") {
console.log('ID_portion:', pl1);
$('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', false);
$('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', true);
} else if (pl1 == "2") {
console.log('ID_portion:', pl1);
$('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', false);
$('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', true);
} else if (pl1 == "3") {
console.log('ID_portion:', pl1);
$('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', false);
$('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', true);
} else if (pl1 == "4") {
console.log('ID_portion:', pl1);
$('#ordersdetailpartyloafweightID option[value="1"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="2"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="3"]').prop('disabled', true);
$('#ordersdetailpartyloafweightID option[value="4"]').prop('disabled', false);
$('#ordersdetailpartyloafweightID option[value="5"]').prop('disabled', false);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<select id="ordersdetailID_portion" name="child-ID_portion" class="form-control select2 select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
<option value="">** Veuillez saisir une option Nombre de sandwiches</option>
<option value="4">100</option>
<option value="1">30</option>
<option value="2">60</option>
<option value="3">80</option>
</select>
<select id="ordersdetailpartyloafweightID" name="child-partyloafweightID" class="form-control select2 select2-hidden-accessible" tabindex="-1" aria-hidden="true" required="">
<option value="">** Please choose the appropriate weight</option>
<option value="2">1 Kg</option>
<option value="3">1.5 Kg</option>
<option value="4">2 Kg</option>
<option value="5">2.5 Kg</option>
<option value="1">600 g</option>
</select>
</form>