如何在两个Django应用程序之间移动模型(Django 1.7) [英] How to move a model between two Django apps (Django 1.7)

查看:123
本文介绍了如何在两个Django应用程序之间移动模型(Django 1.7)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以大约一年前,我开始一个项目,像所有的新开发人员一样,我并没有把重点放在结构上,但是现在我和Django一起开始出现,我的项目布局主要是我的模型可怕的结构。



我的模型主要是在一个单一的应用程序,真的大多数这些模型应该在自己的个人应用程序,我尝试解决这个并移动他们与南方,但我发现它很棘手,真的很困难,因为外键等。



然而由于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆