Ich weiß, dass es eine alte Frage ist, aber ich hatte ein ähnliches Problem und fand eine Problemumgehung:
Ich hatte folgende Klassen:
class CommonInfo(models.Model):
image = models.ImageField(blank=True, null=True, default="")
class Meta:
abstract = True
class Year(CommonInfo):
year = models.IntegerField()
Aber ich wollte, dass das geerbte Bildfeld von Year erforderlich ist, während das Bildfeld der Oberklasse nullbar bleibt. Am Ende habe ich ModelForms verwendet, um das Image in der Validierungsphase zu erzwingen:
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
Es scheint, dass dies nur für einige Situationen gilt (sicherlich, wenn Sie strengere Regeln für das Unterklassenfeld durchsetzen müssen).
Alternativ können Sie die clean_<fieldname>()
Methode anstelle von verwenden clean()
, z. B. wenn ein Feld town
ausgefüllt werden müsste:
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