Как я могу получить список всех объектов модели, которые имеют ForeignKey, указывающий на объект? (Что-то как удалить страница подтверждения в администраторе Django прежде УДАЛЯЕТ КАСКАД).
Я пытаюсь придумать универсальный способ объединить дублирующиеся объекты в базе данных. В основном я хочу все объекты, которые имеют точки ForeignKeys для возражения "B", который будет обновлен для указания для возражения "A", таким образом, я могу тогда удалить "B", не теряя ничего важного.
Спасибо за помощь!
Это дает вам имена свойств для всех связанных объектов:
links = [rel.get_accessor_name() for rel in a._meta.get_all_related_objects()]
Затем вы можете использовать что-то вроде этого, чтобы получить все связанные objects:
for link in links:
objects = getattr(a, link).all()
for object in objects:
# do something with related object instance
Я потратил некоторое время, пытаясь понять это, чтобы реализовать своего рода «паттерн наблюдателя» на одной из моих моделей. Надеюсь, это поможет.
Используйте _meta.get_fields ()
: https://docs.djangoproject.com/en/1.10/ref/models/meta/#django.db. models.options.Options.get_fields (также см. реверс в источнике _get_fields ()
)
Я бы не использовал noscript
для отображения альтернативного содержимого. Для одного из них в теге < noscript >
допустимо только ограниченное число тегов, и < style >
не является одним из них. Вместо этого используйте другой подход. Отображать содержимое, если javascript отключен по умолчанию, и показывать альтернативное содержимое, если JavaScript включен . Лучший способ сделать это с простым CSS и одной линейкой JS. Если вы делаете это так, как я показываю здесь, не должно быть неловкой вспышки контента:
<head>
...
<script type="text/javascript"> document.documentElement.className += " js"</script>
<link type="text/css" href="css/style.css" media="all" rel="stylesheet" />
</head>
<body>
<div id="header" class="no_js">header</div>
<div id="alt_header" class="js">header</div>
.. etc ..
<div id="super_duper" class="js">Whatever</div>
</body>
Просто примените js
ко всему, что должно показывать при включении JavaScript, и no _ js
ко всему остальному. Затем в CSS поместите следующее:
html.js .no_js, html .js { display: none }
html.js .js { display: block }
-121--2762233- Да, они могут. У меня есть 6,1 и 7,0 на одной машине (Windows 7 64 bit no VS 2005 хотя) без каких-либо заметных проблем.
-121--4460177-Попробуйте.
class A(models.Model):
def get_foreign_fields(self):
return [getattr(self, f.name) for f in self._meta.fields if type(f) == models.fields.related.ForeignKey]