私はDjangoを初めて使い、Web APIを作成するためにDjango Rest Frameworkチュートリアルを使用しています。モデルの新しいインスタンスを作成するときの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オブジェクトと1対多の関係にあります(つまり、1つのテストに複数の検証クラスオブジェクトがリンクされている可能性があります)。このため、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
saveメソッドのオーバーライドは、私が今考えることのできる最良の解決策になります。 –
またはデータベースアサーションおよび/または手動でのチェックを定義してください。 –