Veritabanı görünümü tarafından desteklenen bir modelim var.Django - Veritabanı yabancı anahtar kısıtlaması oluşturma nasıl engellenir
class OrgCode(models.Model):
org_code = models.CharField(db_column=u'code',max_length=15)
org_description = models.CharField(max_length=250)
org_level_num = models.IntegerField()
class Meta:
db_table = u'view_FSS_ORG_PROFILE'
başka modelde yabancı anahtar kısıtlamaları bir görünüm başvuran oluşturulamaz çünkü syncdb koşamam
class AssessmentLocation(models.Model):
name = models.CharField(max_length=150)
org = models.ForeignKey(OrgCode)
bu başvuru gerekir.
u"Foreign key 'FK__main_asse__org__1D114BD1'
references object 'view_FSS_ORG_PROFILE'
which is not a user table.", None, 0, -214
7217900), None)
Command:
CREATE TABLE [main_assessmentlocation] (
[id] int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
[name] nvarchar(150) NOT NULL,
[org] int NOT NULL REFERENCES [view_FSS_ORG_PROFILE] ([id]),
)
geçici çözüm Meta dışarı almaktır: db_table görünümüne işaret ve izin senkron db sonra, OrgCode tablo oluşturmak Meta koydu: geri syncdb sonra db_table.
Belirli model veya alanlar için yabancı anahtar kısıtlamalarının oluşturulmasını önlemenin bir yolu var mı? Güncelleştirme
:
def sql_for_inline_foreign_key_references(self, field, known_models, style):
try:
field.rel.to.is_backend_view()
return "", False
except:
return super(DatabaseCreation,self).sql_for_inline_foreign_key_references(field, known_models, style)
oluşturulan SQL: o
class OrgCode(models.Model):
org_code = models.CharField(max_length=15)
org_description = models.CharField(max_length=250)
@staticmethod
def is_backend_view():
return True
sonra django_mssql creation.py içinde DatabaseCreation.sql_for_inline_foreign_key_references overrode bir manzara gösteren ilgili modeli statik bir yöntem ilave syncdb bu kısıtlamayı ortadan kaldırır:
CREATE TABLE [main_assessmentlocation] (
[id] int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
[name] nvarchar(150) NOT NULL,
[org] int, -- NO FK CONSTRAINT ANYMORE --
);
012 Eğer ayarlarsanız
O yüzden belki çalışacak django.db.backends.signals.connection_created sinyal içine çengel, denemeye devam edeceğim django_mssql hack nasıl yapılıyor ...
Teşekkürler! İhtiyacım olan buydu, şimdi bir sürümde inmesini beklemek zorundayım ve hack'imi kaldırabilirim. –
'db_constraint' 1.6 sürümünden beri güvenle kullanılabilir –