假設我有兩個型號:多對多關係自定義序列
{
"name":"Foo",
"ips":["192.168.1.40", "4.4.4.4", "8.8.8.8"]
}
此外,我要構建的IP在每個請求:
class IPAddress(models.Model):
address = models.CharField()
class Rule(models.Model):
name = models.CharField()
ips = models.ManyToMany(IPAddress)
我希望能夠通過如下請求添加規則(沒有url直接構建ip)用於新規則,所以我寫了一個類似於這樣的管理器:
class RuleManager(models.Manager):
def create(self, validated_data):
rule = Rule(name=validate_data['name'])
rule.save()
rule.ips = [IPAddress.objects.get_or_create(item.lower()) for item in validated_data['ips']]
B UT在串行我無法找到一個合適的方式來顯示這一點,我已經寫了一個串行這樣的:
class RuleSerializer(serializers.Serializer):
name = serializers.CharField()
ips = serializers.SlugRelatedField(many=True, slug_field='address', validators=[], queryset=models.IPAddress.objects.all())
但問題是,它驗證IP的請求,如果沒有這樣的IP它返回一個錯誤,儘管我將驗證器設置爲空列表。
我有兩個問題,我該如何禁用此驗證?而且是我寫的串行器與模型的方法是適合我的情況(我不能改變我得到的請求和響應,我必須送)
你需要嵌套的序列化用於創建'ips'通過API,或者您只需要在已經創建ips的地方使用它。 – AKS