Вы можете либо фильтровать по SlideOrder
модели напрямую
slide = Slide.objects.get(pk=1)
slide_orders = SlideOrder.objects.filter(slide=slide)
for slide_order in slide_orders:
print slide_order.number
, либо следовать за внешним ключом назад:
slide = Slide.objects.get(pk=1)
slide_orders = slide.slideorder_set.all()
for slide_order in slide_orders:
print slide_order.number
См. документы в дополнительных полях по отношениям «многие ко многим» для получения дополнительной информации.
s/\([^)]*\)//
Так в Python, Вы сделали бы:
re.sub(r'\([^)]*\)', '', filename)
Если Вы не должны абсолютно использовать regex, <забастовка>, использование забастовка> рассматривает использование Perl текст:: Сбалансированный для удаления круглой скобки.
use Text::Balanced qw(extract_bracketed);
my ($extracted, $remainder, $prefix) = extract_bracketed( $filename, '()', '[^(]*' );
{ no warnings 'uninitialized';
$filename = (defined $prefix or defined $remainder)
? $prefix . $remainder
: $extracted;
}
можно ли думать, "Почему делают все это, когда regex добивается цели в одной строке?"
$filename =~ s/\([^}]*\)//;
текст:: Сбалансированные дескрипторы вложили круглую скобку. Так $filename = 'foo_(bar(baz)buz)).foo'
будет извлечен правильно. regex базировался, решения, предлагаемые здесь, перестанут работать на этой строке. Тот остановится при первом закрытии paren, и другой съест их всех.
$filename = ~ s / ([^}] *)//; # возвращается 'foo_buz)) .foo'
$filename = ~ s / (.*)//; # возвращается 'foo_. нечто'
# текст сбалансировало нечто 'возвратов в качестве примера _). нечто'
, Если любое из regex поведений приемлемо, используйте regex - но зарегистрируйте ограничения и сделанные предположения.
Если бы можно выдержать использовать sed
(возможно выполняются из программы, это было бы столь же просто как:
sed 's/(.*)//g'
>>> import re
>>> filename = "Example_file_(extra_descriptor).ext"
>>> p = re.compile(r'\([^)]*\)')
>>> re.sub(p, '', filename)
'Example_file_.ext'
Если путь может содержать круглые скобки затем r'\(.*?\)'
regex недостаточно:
import os, re
def remove_parenthesized_chunks(path, safeext=True, safedir=True):
dirpath, basename = os.path.split(path) if safedir else ('', path)
name, ext = os.path.splitext(basename) if safeext else (basename, '')
name = re.sub(r'\(.*?\)', '', name)
return os.path.join(dirpath, name+ext)
По умолчанию функция сохраняет заключенные в скобки блоки в каталоге и частях расширения пути.
Пример:
>>> f = remove_parenthesized_chunks
>>> f("Example_file_(extra_descriptor).ext")
'Example_file_.ext'
>>> path = r"c:\dir_(important)\example(extra).ext(untouchable)"
>>> f(path)
'c:\\dir_(important)\\example.ext(untouchable)'
>>> f(path, safeext=False)
'c:\\dir_(important)\\example.ext'
>>> f(path, safedir=False)
'c:\\dir_\\example.ext(untouchable)'
>>> f(path, False, False)
'c:\\dir_\\example.ext'
>>> f(r"c:\(extra)\example(extra).ext", safedir=False)
'c:\\\\example.ext'