Чтобы избежать окрашивания фона ProgressBar
, вы должны получить ссылку на точный точечный рисунок из внутреннего ProgressBar
LayerDrawable
. Это хакерский способ сделать это, но он работает.
LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable();
Drawable drawable = layerDrawable.getDrawable(2); // The progress bitmap
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
Ответ Гарольда указал мне правильное направление. Это набросок того, как я его реализовал (во французской устаревшей базе данных, отсюда несколько странное соглашение об именах):
class Factures(models.Model):
idFacture = models.IntegerField(primary_key=True)
idLettrage = models.ForeignKey('Lettrage', db_column='idLettrage', null=True, blank=True)
class Paiements(models.Model):
idPaiement = models.IntegerField(primary_key=True)
idLettrage = models.ForeignKey('Lettrage', db_column='idLettrage', null=True, blank=True)
class Lettrage(models.Model):
idLettrage = models.IntegerField(primary_key=True)
def delete(self):
"""Dettaches factures and paiements from current lettre before deleting"""
self.factures_set.clear()
self.paiements_set.clear()
super(Lettrage, self).delete()
В диспетчере Django ForeignKey есть метод clear (), который удаляет все объекты из набора связанных объектов. Сначала вызовите это, а затем удалите ваш объект. Внешние ключи зависимых объектов будут иметь значение None (если это разрешено в вашей модели).
Краткое описание здесь: http://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward
Что ж, глядя на метод удаления
def delete(self):
assert self._get_pk_val() is not None, "%s object can't be deleted because its %s attribute is set to None." % (self._meta.object_name, self._meta.pk.attname)
# Find all the objects than need to be deleted.
seen_objs = CollectedObjects()
self._collect_sub_objects(seen_objs)
# Actually delete the objects.
delete_objects(seen_objs)
, я бы сказал, что переопределения удаления должно быть достаточно ... непроверенный код будет
def delete(self):
assert self._get_pk_val() is not None, "%s object can't be deleted because its %s attribute is set to None." % (self._meta.object_name, self._meta.pk.attname)
# Find all the objects than need to be deleted.
seen_objs = CollectedObjects()
seen_objs.add(model=self.__class__, pk=self.pk, obj=self, parent_model=None)
# Actually delete the objects.
delete_objects(seen_objs)
Один из способов - вызвать метод clear перед удалением, документация здесь , которая в основном «очищает» отношения. Одна проблемная мысль: это не авто само по себе. Вы можете выбрать: вызывать его каждый раз, когда вам не нужен каскад, или использовать сигнал pre_delete для отправки clear перед каждым удалением, конечно, это вызовет проблемы, когда вы ДЕЙСТВИТЕЛЬНО хотите удалить - каскад.
Или вы можете внести свой вклад в сообщество django и добавьте аргумент ключевого слова для удаления, может быть, он будет в django 1.3?: D
FYI - запрос на эту возможность существует в репозитории исходных текстов django по адресу http://code.djangoproject.com/ticket/7539. Похоже, что эта тема привлекает некоторое внимание. Надеемся, что она будет включена в будущие выпуски Django.
Тикет содержит исправления к ядру Django для реализации опционального параметра "on_delete" для models.ForeignKey(...), который позволяет указать, что произойдет при удалении указанной модели, включая выключение поведения по умолчанию ON DELETE CASCADE.
.Re: http://code.djangoproject.com/ticket/7539
Нет внимания по состоянию на Django 1.2.1, июнь 2010. Я думаю, что нам нужно «следить за этим пространством».