Sé que es una pregunta antigua, pero tuve un problema similar y encontré una solución:
Tuve las siguientes clases:
class CommonInfo(models.Model):
image = models.ImageField(blank=True, null=True, default="")
class Meta:
abstract = True
class Year(CommonInfo):
year = models.IntegerField()
Pero quería que se requiriera el campo de imagen heredado de Year mientras se mantenía el campo de imagen de la superclase anulable. Al final utilicé ModelForms para hacer cumplir la imagen en la etapa de validación:
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
Parece que esto solo es aplicable para algunas situaciones (ciertamente, donde necesita hacer cumplir reglas más estrictas en el campo de subclase).
Alternativamente, puede usar el clean_<fieldname>()
método en lugar de clean()
, por ejemplo, si town
se requiere completar un campo :
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