6
對於下面的一組模型(Foo,Bar),您可以施加一個交叉驗證規則,如以下代碼段的Bar.clean中的交叉驗證規則,直到django 1.7。Django 1.8.3 - 使用相關對象進行模型字段驗證
相同的片段在django 1.8.3中拋出RelatedObjectDoesNotExist
錯誤。
在django 1.8.3中獲得相同結果的新方法和改進方法是什麼?
(我已經包括了admin.py代碼只是爲了說明如何使用這些模型。)
models.py
from django.db import models
from django.core.exceptions import ValidationError
class Foo(models.Model):
name = models.CharField("Name", blank=True, max_length=300)
class Bar(models.Model):
name = models.CharField("Name", blank=True, max_length=300)
foo = models.ForeignKey('Foo', verbose_name='Foo')
def clean(self):
if self.name + self.foo.name != 'FooBar':
raise ValidationError('Concatenation should be FooBar.')
admin.py
from django.contrib import admin
import models
class BarInline(admin.TabularInline):
model = models.Bar
class FooAdmin(admin.ModelAdmin):
model = models.Foo
inlines = [BarInline,]
site = admin.site
site.register(models.Foo,FooAdmin)
自省是非常有用的,謝謝。你知道爲什麼Django開發人員會從模型clean()方法中刪除查詢相關對象的能力,這看起來相當方便嗎? –