Как я могу всегда знать обо всех тегах в Подвижном?

Помимо встроенной страницы администратора, другой причиной решения ForeignKey является то, что оно позволяет вам использовать правильный менеджер БД по умолчанию, когда к объектам обращаются по обратной связи. Рассмотрим пример из этого фрагмента менеджера подклассов . Допустим, определение класса Post из примера выглядит следующим образом:

class Post(ParentModel):
    title = models.CharField(max_length=50)
    onetoone = models.ForeignKey(SomeModel, unique=True)

    children = ChildManager()
    objects = models.Manager()

Вызывая somemodel_instance.post_set.all()[0], вы получаете нужные объекты подклассов класса Post, как указано путем определения первого ( по умолчанию) менеджер в качестве ChildManager. С другой стороны, с помощью OneToOneField, вызвав somemodel_instance.post, вы получите экземпляр класса Post. Вы всегда можете позвонить в somemodel_instance.post.subclass_object и получить тот же результат, но менеджер по умолчанию может выполнить любой другой вид трюков, а решения FK прекрасно их скрывают.

Если вы владеете и можете изменять пользовательский код менеджера, вы можете использовать атрибут use_for_related_fields вместо использования FK вместо допустимого поля 1to1, но даже это может дать сбой из-за некоторых неизвестных меня раздражают автоматические менеджеры. Насколько я помню, в приведенном выше примере это не получится.

15
задан Martin Geisler 31 January 2012 в 22:15
поделиться

2 ответа

Управление версиями файла .hgtags позволяет

  • редактировать теги и видеть, кто их редактировал (и почему, если они оставили правильное сообщение о фиксации)
  • переносить теги между репозиториями с использованием обычных механизмов

Однако здесь происходит некоторая путаница.

  • Вы пишете, что

    [...] И если я затем обновлю этот помеченный набор изменений позже, рабочая копия не будет содержать никаких сведений об этом теге. [...]

    Это неверно, теги собираются из файлов .hgtags , найденных во всех главах . Это означает, что вы можете выполнить обновление до старого тега ( hg update 0.1 ) и по-прежнему видеть все свои теги ( hg tags ).

  • Вы спрашиваете, видны ли ветки повсеместно. Да, они есть - имена именованных ветвей могут использоваться в любом контексте, где вам нужно указать набор изменений, как и теги.

Убедитесь, что вы понимаете, что такое именованные ветки, прежде чем начать их использовать. На самом деле они не необходимы для создания ветки исправления ошибок. Вместо этого вы можете просто вернуться ( hg update 1.0 ) и исправить ошибку, а затем зафиксировать. Это создаст новую головку, которая станет вашей линией развития 1.1 (это дает вам несколько голов ). Таким образом, вам не нужно создавать именованную ветку, чтобы добавить новую ветку разработки в ваш репозиторий.

Наличие нескольких головок полностью эквивалентно наличию нескольких клонов. Вы даже можете преобразовывать туда и обратно: вы можете использовать

% hg clone -r X-head repo repo-X

, чтобы распутать набор изменений X-head и его предков из других наборов изменений в репозитории . И вы можете объединить несколько клонов, просто перетащив все ревизии в один большой клон.

Именованные ветви похожи, но разные. Они позволяют вставлять имя в каждый набор изменений. Таким образом, у вас может быть несколько наборов изменений в вашей истории с именем «foo». Когда вы выполните hg update foo , вы окажетесь в самом конце этих наборов изменений. Таким образом, именованные ветви функционируют как своего рода плавающий тег.

Если вам не нравится идея постоянной метки для ваших наборов изменений, вы можете вместо этого попробовать расширение закладок . Это также даст вам «плавающие теги», которые вы можете использовать для обновления, но они не будут постоянно частью истории, поскольку они не версируются.

Надеюсь, это немного поможет.

19
ответ дан 1 December 2019 в 03:43
поделиться

IBM провела серию по принципам проектирования XML , в которой содержится много истин. Лучший совет заключается в том, что никогда нет ни одного правильного пути 1 другого:

  • Будьте лаконичны в выборе дизайна, если вы выберете маршрут А выберите его везде. т.е.: при использовании элемента-оболочки < книги > для хранения < книга > используйте элемент-оболочку везде для коллекций.

  • Быть как можно более терпким, чтобы избежать беспорядка. Предполагается, что XML читается нами, людьми.

  • Избегайте пространств имен, насколько это возможно
  • Оно ДОЛЖНО быть проверяемым через схему.
-121--3612695-

Во-первых, сделайте что-нибудь самостоятельно, только если уже нет ничего, что можно было бы использовать.

Сохранить имена элементов короткими, но/и описательными.

Если это вообще возможно, иметь очень строгую схему, которая не позволяет несколько способов сделать одно и то же. Это предотвратит возможную путаницу в отношении того, что возможно или как интерпретировать разметку.

Будьте очень осторожны в разрешении расширяемости, поскольку это может позволить проблемы, которые пытается предотвратить строгая схема.

Проверьте версию схемы и всегда старайтесь избежать прерывания изменений, но/и обеспечить обратную совместимость с новыми версиями.

Убедитесь, что у вас есть средство проверки и другие инструменты, позволяющие максимально упростить использование нового языка.

-121--3612690-

Выбор метода маркировки определенно имеет некоторые странные побочные эффекты, но они хорошо объяснены в этой вики . Также предлагается клонировать все репо, а затем обновить до точки интереса, чтобы избежать случая, когда будет создано репо, которое не содержит тэг, который был использован для его создания.

1
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: