#python #django
#python #django
Вопрос:
В моей модели заказа у меня есть два поля Diagnosis_note и Internal_memo, если одно из полей пустое, я хочу отобразить красную кнопку и зеленую кнопку, если оба поля пусты. Однако в настоящее время в моей функции, если Diagnosis_note или оба поля пусты, отображается зеленая кнопка, а если поле Internal_memo пустое, отображается красная кнопка. Она должна отображать красную кнопку, если какая-либо из них пуста или не пуста, и зеленую, если обе пустые. Что-то не так с моей функцией is_complete, но я не могу понять, что.
class Order(models.Model):
Diagnosis_note = models.CharField(max_length=30, blank=True)
Internal_memo = models.CharField(max_length=100, blank=True)
def is_complete(self):
fields_list = [self.Diagnosis_note, self.Internal_memo]
if self.Diagnosis_note or self.Internal_memo is None:
return True
else:
return False
html
{% if Order.is_complete %}
<td><a href="{% url 'accounts:special-notes' Order.id %}" class="btn btn-danger" role="button"><i class="fas fa-check-circle"></i></a></td>
{% else %}
<td><a class="btn btn-success" role="button"><i class="far fa-circle"></i> </a></td>
{% endif %}
Комментарии:
1. Я думаю, что в вашем состоянии существует неправильное понимание приоритета.
self.Diagnosis_note or self.Internal_memo is None
означает «Diagnosis_note считается истинным или Internal_memo равно None», а не «один из Diagnosis_note и Internal_memo равен None».
Ответ №1:
Вы сравниваете self.Internal_memo is None
, но это может быть пустая строка (не None).
def is_complete(self):
return self.Diagnosis_note and self.Internal_memo # returns True if both fields are not False and not empty. otherwise, it returns False
Ответ №2:
Вам нужно переписать оператор if-else в модели. То, что вы хотите, является зеленым только тогда, когда оба значения пусты, правильно? Красный, если какой-либо из них не является пустым или оба не являются пустыми. И из вашего html оба являются пустыми, затем возвращайте False, иначе True. Это заменит всю вашу инструкцию if else.
return self.Diagnosis_note or self.Internal_memo
Комментарии:
1. должен ли я заменить возвращаемое значение true на это?
2. Замените весь ваш оператор if-else на это, предполагая, что вы хотите выполнить условия, перечисленные в моем ответе.
3. проблема в том, что он делает обратное. Она возвращает зеленый цвет, если оба поля не пусты, и красный, если оба поля пусты или одно из них пустое.
4. Извините, я исправил ответ.
5. Я хочу, чтобы функция возвращала красный цвет, если оба поля не пустые или одно из них не является пустым, и зеленый, если оба поля пустые.
Ответ №3:
Попробуйте изменить строку if self.Diagnosis_note or self.Internal_memo is None:
на if self.Diagnosis_note == None or self.Internal_memo == None:
Тест для w = None и q = 1:
[1]if q or w is None: print("Y")
>>> Y
[2] if w or q is None: print("Y")
>>>
[3] if w == None or q == None: print("Y")
>>> Y
Ответ №4:
Во-первых, вы имеете дело не с объектом, вместо этого вы вызываете класс. Сначала вы должны получить экземпляр, который вы ищете, например:
order = Order.objects.get(id=order_id)
Затем передайте порядок в шаблон и выполните проверку.
Во-вторых, когда дело доходит до вашего условия if в методе is_complete(), это должно быть примерно так
if not self.Diagnosis_note and not self.Internal_memo: return False
else: return True
Условия должны быть для обоих атрибутов и не использовать None, поскольку что, если значение равно «. оператор not обрабатывает как None, так и » в этом случае.
Комментарии:
1. Я заменил «if self. Diagnosis_note или self. Internal_memo равно None:»with», если не self. Diagnosis_note или нет self. Internal_memo:» , но теперь он возвращает зеленый, если оба поля не пустые, и красный, если оба поля пустые или одно из них пустое
2. Моя ошибка, это должно быть … если не self. Diagnosis_note, а не self. Internal_memo: возвращает False. Отредактировал ответ