1
我是Django的新手,並且正在使用Django Rest Framework教程來創建Web API。創建模型的新實例時的Django驗證
我有以下模型,我有意見使用createAPIView來創建每個這些模型的新實例。
class ValidationClass (models.Model):
id = models.IntegerField(primary_key=True, null=False)
name = models.CharField(max_length=128, unique=True)
parameters = models.TextField()
def __str__(self):
return '{} - {} - {}'.format(self.id, self.name, self.parameters)
db = 'qa_suite'
class Test(models.Model):
id = models.IntegerField(primary_key=True, null=False)
name = models.CharField(max_length=128, unique=True)
test_group = models.ForeignKey(TestGroup)
description = models.TextField()
query_text = models.TextField()
failure_condition = models.CharField(max_length=20, choices=(
('Error', 'Error'),
('Warn', 'Warn')
), default = 'Error')
status = models.CharField(max_length=20, choices=(
('Enabled', 'Enabled'),
('Disabled', 'Disabled')
), default = 'Enabled')
created = models.DateTimeField('Creation Date', auto_now_add=True, blank=True)
updated = models.DateTimeField('Date last updated', auto_now_add=True, blank=True)
def __str__(self):
return '{} - {}'.format(self.id, self.name)
db = 'qa_suite'
class TestValidation(models.Model):
test = models.ForeignKey(Test)
validation_class = models.ForeignKey(ValidationClass)
input_parameters = models.TextField()
def __str__(self):
return '{} - {} - {}'.format(self.test, self.validation_class, self.input_parameters)
class Meta:
unique_together = (('test', 'validation_class'),)
db = 'qa_suite'
我想要做的,是確保每一個新的測試對象被創建時,它與至少一個ValidationClass對象。 Test對象與ValidationClass對象具有一對多的關係(即一個測試可能有多個與其鏈接的驗證類對象)。因此,我無法將外鍵引用添加到Test模型中的驗證類對象。 所以基本上,我期待的是每次創建一個新的Test對象時,我想確保也創建一個新的TestValidation對象。
瀏覽:
# Post new Validation Class Object to database
class ValidationClassCreateAPI(generics.CreateAPIView):
serializer_class = ValidationClassSerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
# Post new Test Validation Object to database
class TestValidationCreateAPI(generics.CreateAPIView):
serializer_class = TestValidationSerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
# Post new Test Object to database
class TestCreateAPI(generics.CreateAPIView):
serializer_class = TestSerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
我已將用於創建這些模型的視圖添加到此帖子中。即使我使用原子事務,如何在創建新的測試對象時強制執行該操作,還必須創建一個新的TestValidation對象? – RajveerParikh
重寫保存方法將是我現在可以想到的最佳解決方案 –
或者手動定義數據庫斷言和/或檢查。 –