Je sais que c'est une vieille question, mais j'ai eu un problème similaire et j'ai trouvé une solution de contournement:
J'ai eu les cours suivants:
class CommonInfo(models.Model):
image = models.ImageField(blank=True, null=True, default="")
class Meta:
abstract = True
class Year(CommonInfo):
year = models.IntegerField()
Mais je voulais que le champ image hérité de Year soit requis tout en gardant le champ image de la superclasse nullable. En fin de compte, j'ai utilisé ModelForms pour appliquer l'image au stade de la validation:
class YearForm(ModelForm):
class Meta:
model = Year
def clean(self):
if not self.cleaned_data['image'] or len(self.cleaned_data['image'])==0:
raise ValidationError("Please provide an image.")
return self.cleaned_data
admin.py:
class YearAdmin(admin.ModelAdmin):
form = YearForm
Il semble que cela ne s'applique que dans certaines situations (certainement où vous devez appliquer des règles plus strictes sur le champ de sous-classe).
Vous pouvez également utiliser la clean_<fieldname>()
méthode à la place de clean()
, par exemple, si un champ town
doit être rempli:
def clean_town(self):
town = self.cleaned_data["town"]
if not town or len(town) == 0:
raise forms.ValidationError("Please enter a town")
return town