I've these two models:
class Vehicle(models.Model):
"""Vehicle object."""
plate = models.CharField(max_length=255, primary_key=True)
brand = models.CharField(max_length=255)
model = models.CharField(max_length=255)
owner = models.CharField(max_length=255)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
class Center(models.Model):
"""Center object."""
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
name = models.CharField(max_length=255)
vehicles = models.ManyToManyField('Vehicle', related_name='vehicle_plate')
In my unit test, if I do:
def test_create_center_with_existing_vehicles(self):
"""Test creating a center with existing vehicle."""
vehicle_1 = Vehicle.objects.create(user=self.user, plate='ab123cd', brand='brand', model='model', owner='bla bla')
payload = {
'name': 'first center',
'vehicles': [{'plate': 'ab123cd', 'brand': 'brand', 'model': 'model', 'owner': 'bla bla'}]
}
res = self.client.post(CENTERS_URL, payload, format='json')
I get an error:
{'vehicles': [{'plate': [ErrorDetail(string='vehicle with this plate already exists.', code='unique')]}, {}]}
I can't intercept the flow in my CenterView, perform_create() is not interpelled from the serializer.
Is there a validation step ? Could I override them, like the method 'get_or_create()' ?
Thanx, I'm a beginner ...
I'm looking for a way to intercept the validation step.
The problem is in my model. There's a unique constraint, so the validation step is blocked (it tries to save a vehicle that exists).
I couldn't override the validation, so I worked on
view.py, overriding thecreatemethod: