Я создал миксины для этого сейчас и
class ChangeFieldNamesMixin(models.Model):
def __init__(self, *args, **kwargs):
model_fields = self._meta.get_fields()
initialise_texts(self._meta.model_name, model_fields)
super(ChangeFieldNamesMixin, self).__init__(*args, **kwargs)
class Meta:
abstract = Trueenter code here
def initialise_texts(name, model_fields):
model_field_name = name + 'Field'
Model = apps.get_model("custom", model_field_name)
field_names_to_create = []
field_dict = compose_field_dict(name, Model)
# create entries in table if empty
if len(field_dict) == 0:
for entry in model_fields:
if entry.editable:
attrs = {'name': entry.name, 'help_text': entry.help_text, 'label': entry.verbose_name}
new_entry = Model(**attrs)
field_names_to_create.append(new_entry)
print('Saving {}'.format(new_entry))
field_list = Model.objects.bulk_create(field_names_to_create)
compose_field_dict(name, Model, field_list)
else:
for entry in model_fields:
if entry.editable:
key = entry.name
if key in field_dict.keys():
setattr(entry, 'verbose_name', field_dict[key].label)
setattr(entry, 'help_text', field_dict[key].help_text)
Я не слишком рад этому решению, потому что я думаю, что должен быть лучший способ инициализировать поля в базе данных. Я довольно новичок в разработке django и python (более опытный в Java), поэтому некоторые отзывы будут оценены.
Я не верю, что вам нужно использовать mod_rewrite, вы должны быть в состоянии использовать vhosts для этого, как вы предлагаете. Для этого у вас будет один vhost с именем_сервера domain2.example, который указывает на каталог, который вы хотите. При этом также будет использоваться директива ServerAlias для domain1.example, поэтому запросы на это отправляются в тот же каталог.
См. Документацию для ServerAlias и DocumentRoot . Также обратите внимание, что если вы хотите, чтобы каталог отображался в URL, вам потребуется использовать mod_rewrite.
При условии, что домены независимы, рекомендуемое решение - виртуальные хосты.
Я предполагаю, что у вас нет доступа к конфигурации Apache, иначе да, виртуальные хосты - ваш лучший вариант. Однако, если вы этого не сделаете, это может быть помещено в файл .htaccess и должно помочь:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+)\.yourwebsite\.com$
RewriteRule ^/(.*)$ /path/to/your/subdomains/%1/$1 [L]
Поэтому запрос к http://foo.yourwebsite.com/bar
будет / path / to / your / subdomains / foo / bar