如何在两个Django应用程序之间移动模型(Django 1.7) [英] How to move a model between two Django apps (Django 1.7)
问题描述
我的模型主要是在一个单一的应用程序,真的大多数这些模型应该在自己的个人应用程序,我尝试解决这个并移动他们与南方,但我发现它很棘手,真的很困难,因为外键等。
然而由于Django 1.7和内置的支持迁移是有更好的方式做这是现在吗?
提前感谢您的帮助。
注意: ozan answer 比我的更好。请使用该方法
CREATING APPS&模型
1)创建两个应用程序, app1
& app2
。
$ python manage.py startapp app1
$ python manage.py startapp app2
2)创建两个模型 model1
& model2
。
app1 / model1.py
从django.db导入模型
class model1(models.Model):
name = models。 CharField(max_length = 100)
app2 / model2.py
从$ d $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ .CharField(max_length = 100)
3)应用迁移。 p>
$ python manage.py makemigrations app1&& python migrate app1
$ python manage.py makemigrations app2&& python迁移app2
Django将创建2个表 app1_model
& app2_model2
。您可以向模型添加数据。
让我们在模型中添加一些数据,以确保在移动模型时保留数据。
在[1]中:from apps.app1.models import model1
在[2]中:model1.objects.create()
Out [2]:< model1:model1 object>
在[3]中:model1.objects.create()
Out [3]:< model1:model1 object>
MIGRATING MODEL
让我们来看看如何执行实际的迁移。
4)重命名Table&移动源代码
转到数据库并将 app1_model
重命名为 app2_model1
。将 model1
的源代码从 app1
移动到 app2
&添加元选项。
app1 / model1.py
code>从django.db导入模型
app2 / model2.py
从django.db导入模型
class model2(models.Model):
name = models.CharField(max_length = 100)
class model1(models.Model):
name = models.CharField(max_length = 100)
类Meta:
managed = False
db_table ='app2_model1'
5)应用迁移。
应用两个应用的迁移。
$ python manage.py makemigrations app2& python manage.py migrate app2
$ python manage.py makemigrations app1&& python manage.py migrate --fake app1
迁移完成后,您可以检查模型。
在[1]中:from apps.app2.models import model1
在[2 ]:model1.objects.all()
Out [2]:[< model1:model1 object>< model1:model1 object>]
So about a year ago I started a project and like all new developers I didn't really focus to much on the structure, however now I am further along with Django it has started to appear that my project layout mainly my models are horrible in structure.
I have models mainly held in a single app and really most of these models should be in their own individual apps, I did try and resolve this and move them with south however I found it tricky and really difficult due to foreign keys ect.
However due to Django 1.7 and built in support for migrations is there a better way to do this now?
Thank you in advance for any help.
Note: ozan answer is better than mine. Please use that method
CREATING APPS & MODELS
1) Create two apps, app1
& app2
.
$ python manage.py startapp app1
$ python manage.py startapp app2
2) Create two models model1
& model2
.
app1/model1.py
from django.db import models
class model1(models.Model):
name = models.CharField(max_length=100)
app2/model2.py
from django.db import models
class model1(models.Model):
name = models.CharField(max_length=100)
3) Apply migrations.
$ python manage.py makemigrations app1 && python migrate app1
$ python manage.py makemigrations app2 && python migrate app2
Django will create 2 tables app1_model
& app2_model2
. You can add data to models.
Lets add little data into our models, to make sure we preserve data while moving model.
In [1]: from apps.app1.models import model1
In [2]: model1.objects.create()
Out[2]: <model1: model1 object>
In [3]: model1.objects.create()
Out[3]: <model1: model1 object>
MIGRATING MODEL
Lets look how to perform the actual migration.
4) Rename Table & Move Source Code
Go to your database and rename app1_model
to app2_model1
. Move source code for model1
from app1
to app2
& add meta options.
app1/model1.py
from django.db import models
app2/model2.py
from django.db import models
class model2(models.Model):
name = models.CharField(max_length=100)
class model1(models.Model):
name = models.CharField(max_length=100)
class Meta:
managed = False
db_table = 'app2_model1'
5) Apply Migrations. Apply migrations for both apps.
$ python manage.py makemigrations app2 && python manage.py migrate app2
$ python manage.py makemigrations app1 && python manage.py migrate --fake app1
Once migrations are completed, you can check the data in the model.
In [1]: from apps.app2.models import model1
In [2]: model1.objects.all()
Out[2]: [<model1: model1 object>, <model1: model1 object>]
这篇关于如何在两个Django应用程序之间移动模型(Django 1.7)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!