Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
django
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
django
Commits
08dc90bc
Kaydet (Commit)
08dc90bc
authored
Şub 03, 2013
tarafından
Ramiro Morales
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Fixed #14305 -- Switched inspectdb to create unmanaged models.
Thanks Ian Kelly for the report and initial patch.
üst
c9c40bc6
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
58 additions
and
2 deletions
+58
-2
inspectdb.py
django/core/management/commands/inspectdb.py
+4
-2
legacy-databases.txt
docs/howto/legacy-databases.txt
+29
-0
django-admin.txt
docs/ref/django-admin.txt
+15
-0
tests.py
tests/regressiontests/inspectdb/tests.py
+10
-0
No files found.
django/core/management/commands/inspectdb.py
Dosyayı görüntüle @
08dc90bc
...
...
@@ -40,8 +40,9 @@ class Command(NoArgsCommand):
cursor
=
connection
.
cursor
()
yield
"# This is an auto-generated Django model module."
yield
"# You'll have to do the following manually to clean this up:"
yield
"# * Rearrange models' order"
yield
"# * Make sure each model has one field with primary_key=True"
yield
"# * Rearrange models' order"
yield
"# * Make sure each model has one field with primary_key=True"
yield
"# * Remove `managed = False` lines for those models you wish to give write DB access"
yield
"# Feel free to rename the models, but don't rename db_table values or field names."
yield
"#"
yield
"# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'"
...
...
@@ -224,5 +225,6 @@ class Command(NoArgsCommand):
to the given database table name.
"""
return
[
" class Meta:"
,
" managed = False"
,
" db_table = '
%
s'"
%
table_name
,
""
]
docs/howto/legacy-databases.txt
Dosyayı görüntüle @
08dc90bc
...
...
@@ -49,6 +49,35 @@ Once you've cleaned up your models, name the file ``models.py`` and put it in
the Python package that holds your app. Then add the app to your
:setting:`INSTALLED_APPS` setting.
If your plan is that your Django application(s) modify data (i.e. edit, remove
records and create new ones) in the existing database tables corresponding to
any of the introspected models then one of the manual review and edit steps
you need to perform on the resulting ``models.py`` file is to change the
Python declaration of each one of these models to specify it is a
:attr:`managed <django.db.models.Options.managed>` one. For example, consider
this generated model definition:
.. parsed-literal::
class Person(models.Model):
id = models.IntegerField(primary_key=True)
first_name = models.ChaField(max_length=70)
class Meta:
**managed = False**
db_table = 'CENSUS_PERSONS'
If you wanted to modify existing data on your ``CENSUS_PERSONS`` SQL table
with Django you'd need to change the ``managed`` option highlighted above to
``True`` (or simply remove it to let it because ``True`` is its default value).
This servers as an explicit opt-in to give your nascent Django project write
access to your precious data on a model by model basis.
.. versionchanged:: 1.6
The behavior by which introspected models are created as unmanaged ones is new
in Django 1.6.
Install the core Django tables
==============================
...
...
docs/ref/django-admin.txt
Dosyayı görüntüle @
08dc90bc
...
...
@@ -288,9 +288,24 @@ needed.
``inspectdb`` works with PostgreSQL, MySQL and SQLite. Foreign-key detection
only works in PostgreSQL and with certain types of MySQL tables.
If your plan is that your Django application(s) modify data (i.e. edit, remove
records and create new ones) in the existing database tables corresponding to
any of the introspected models then one of the manual review and edit steps
you need to perform on the resulting ``models.py`` file is to change the
Python declaration of each one of these models to specify it is a
:attr:`managed <django.db.models.Options.managed>` one.
This servers as an explicit opt-in to give your nascent Django project write
access to your precious data on a model by model basis.
The :djadminopt:`--database` option may be used to specify the
database to introspect.
.. versionchanged:: 1.6
The behavior by which introspected models are created as unmanaged ones is new
in Django 1.6.
loaddata <fixture fixture ...>
------------------------------
...
...
tests/regressiontests/inspectdb/tests.py
Dosyayı görüntüle @
08dc90bc
...
...
@@ -140,3 +140,13 @@ class InspectDBTestCase(TestCase):
self
.
assertIn
(
"field_field_0 = models.IntegerField(db_column='
%
s__')"
%
base_name
,
output
)
self
.
assertIn
(
"field_field_1 = models.IntegerField(db_column='__field')"
,
output
)
self
.
assertIn
(
"prc_x = models.IntegerField(db_column='prc(
%
) x')"
,
output
)
def
test_managed_models
(
self
):
"""Test that by default the command generates models with `Meta.managed = False` (#14305)"""
out
=
StringIO
()
call_command
(
'inspectdb'
,
table_name_filter
=
lambda
tn
:
tn
.
startswith
(
'inspectdb_columntypes'
),
stdout
=
out
)
output
=
out
.
getvalue
()
self
.
longMessage
=
False
self
.
assertIn
(
" managed = False"
,
output
,
msg
=
'inspectdb should generate unmanaged models.'
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment