Я новичок в Django и использую учебник Django Rest Framework для создания веб-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'
То, что я хотел бы сделать, это убедиться в том, что каждый раз, когда создается новый объект Test, он связан, по меньшей мере, одного объекта ValidationClass. Тестируемый объект имеет отношение «один ко многим» к объекту ValidationClass (т. Е. Один тест может содержать несколько объектов класса проверки, связанных с ним). Из-за этого я не могу добавить ссылку на внешний ключ для объекта класса проверки в модели для теста. Так что, по сути, что я хочу сделать, каждый раз, когда создается новый объект 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
переопределение метода сохранения было бы лучшим решением, о котором я могу сейчас подумать –
Или определить утверждение и/или проверку базы данных вручную. –