Bunun eski bir soru olduğunu biliyorum, ancak benzer bir sorun yaşadım ve bir çözüm buldum:
Aşağıdaki dersleri aldım:
class CommonInfo(models.Model):
image = models.ImageField(blank=True, null=True, default="")
class Meta:
abstract = True
class Year(CommonInfo):
year = models.IntegerField()
Ancak, süper sınıfın görüntü alanını boş bırakılabilir tutarken Yılın devralınan görüntü alanının gerekli olmasını istedim. Sonunda, doğrulama aşamasında görüntüyü uygulamak için ModelForms'u kullandım:
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
Görünüşe göre bu sadece bazı durumlar için geçerli (kesinlikle alt sınıf alanında daha katı kurallar uygulamanız gereken yerlerde).
Alternatif clean_<fieldname>()
olarak clean()
, bunun yerine yöntemi kullanabilirsiniz , örneğin bir alanın town
doldurulması gerekirse:
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