Проверка Django inlinemodeladmin - но с общим отношением

Ранее у меня были такие модели:

class AssemblyAnnotation(models.Model):
    assembly = models.ForeignKey(Assembly)
    type = models.ForeignKey(AssemblyAnnotationType)
    ...
    def clean(self):
        from django.core.exceptions import ValidationError
        if not self.type.can_annotate_aliases and self.assembly.alias_of_id is not None:
            raise ValidationError('The selected annotation type cannot be applied to this assembly.')

В результате новая AssemblyAnnotation (присоединяемая через встроенную строку) могла иметь только подмножество значений для своего атрибута типа в зависимости от родительской сборки.

Это отлично сработало.

Теперь пришло время применить эти аннотации к другим объектам, которые немного отличаются:

class ObjectAnnotation(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()
    type = models.ForeignKey(AssemblyAnnotationType)
    ...
    def clean(self):
        from django.core.exceptions import ValidationError
        if self.content_type == ContentType.objects.get_for_model(Assembly):
            if not self.type.can_annotate_aliases and self.content_object.alias_of_id is not None:
                raise ValidationError('The selected annotation type cannot be applied to this assembly.')

Как видите, я хочу применить те же правила. Однако есть проблема. GenericInline, который я сейчас использую, не устанавливает self.content_type до запуска моего метода clean ().

Есть ли способ обойти это? Я делаю это неправильно?

Спасибо за помощь.

7
задан EB. 20 August 2010 в 16:45
поделиться