Django model.META.unique_together
Verfasst: Montag 13. Juli 2009, 13:10
Im django model kann man unique-together nutzten:
http://docs.djangoproject.com/en/dev/re ... e-together
Jedoch ist das Datenbank abhängig, ob es auch zu einem Fehler kommt, wenn doppelte Einträge erzeugt werden.
Nun habe ich mir ein signal handler gebaut, der es manuell überprüft:
Es wäre ja eigentlich unsinnig den zu benutzten, wenn die DB es selber kann. Deswegen hab ich sowas gemacht:
Ich Frage mich allerdings, welche DB's es können und welche nicht. Bei SQLite geht es offensichtlich nicht.
In connection.features ist keine Angabe darüber erhalten. Wie komme ich an die Info's aus django herran?
http://docs.djangoproject.com/en/dev/re ... e-together
Jedoch ist das Datenbank abhängig, ob es auch zu einem Fehler kommt, wenn doppelte Einträge erzeugt werden.
Nun habe ich mir ein signal handler gebaut, der es manuell überprüft:
Code: Alles auswählen
def check_unique_together(sender, **kwargs):
instance = kwargs["instance"]
for field_names in sender._meta.unique_together:
model_kwargs = dict([(field_name, getattr(instance, field_name)) for field_name in field_names])
count = sender.objects.filter(**model_kwargs).count()
if count > 0:
field_names = get_text_list(field_names, _('and'))
msg = _(u"%(model_name)s with this %(field_names)s already exists.") % {
'model_name': unicode(instance.__class__.__name__),
'field_names': unicode(field_names)
}
raise IntegrityError(msg)
Code: Alles auswählen
def auto_add_check_unique_together(model_class):
"""
Add only the signal handler check_unique_together, if a database without UNIQUE support is used.
"""
if settings.DATABASE_ENGINE in ('sqlite3',): # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
signals.pre_save.connect(check_unique_together, sender=model_class)
In connection.features ist keine Angabe darüber erhalten. Wie komme ich an die Info's aus django herran?