我有两个型号:验证是从来没有发射
class Manufacturer(models.Model):
name = models.CharField(max_length = 100)
class Car(models.Model):
manufacturer = models.ForeignKey(Manufacturer, blank = True, null = True)
我的串行器:
class ManufacturerSerializer(serializers.ModelSerializer):
class Meta:
model = Manufacturer
fields = ('id', 'name')
class CarSerializer(serializers.ModelSerializer):
manufacturer = Manufact
class Meta:
model = Car
fields = ('id', 'name', 'manufacturer')
def validate(self, attrs):
try:
attrs['manufacturer'] = Manufacturer.objects.get(pk = attrs['manufacturer'])
except Manufacturer.DoesNotExist:
raise ValidationError(_('Not found'))
return attrs
我的观点:
class CarList(generics.ListCreateAPIView):
queryset = Car.objects.all()
serializer_class = CarSerializer
当我尝试添加一个新的Car calling POST /cars/
我得到一个验证错误manufacturer
是必填字段。 Car
模型预计manufacturer
字段为Manufacturer
对象,但为了使消息小,我将其传递给manufacturer_id
。
我知道应该提出一个ValidationError
所以要解决这个问题我确认我是否Manufacturer
通过此ID存在期间添加validate(..)
我CarSerializer
所以,我把它分配给ATTRS。
问题是这样的validate(..)
从不叫我甚至尝试添加post()
方法CarList
视图和手动调用is_valid()
没有成功。
但我仍然得到验证错误,我认为它来自模型。
该死的,它的工作。但是,当我做'GET/cars /'请求时,我得到'manufacturer:1'而不是'manufacturer:{name:“BMW”,country:“Germany”,...}' – user1125177
这是正确的。要使用不同的序列化器,请覆盖视图上的get_serializer_class方法,并检查它是GET还是POST。或者做第二个'GET/manufacturer/[pk] /'来获取细节(当然创建了这个视图之后)。 –
所以我需要两个CarSerializers,一个是制造商= ManufacturerSerializer(),另一个没有这个生产线?比在视图中,我检查它是一个POST或GET并加载适当或? – user1125177