Angenommen, ich habe zwei Modelle:ManyToMany Beziehung benutzerdefinierte Serializer
class IPAddress(models.Model):
address = models.CharField()
class Rule(models.Model):
name = models.CharField()
ips = models.ManyToMany(IPAddress)
ich in der Lage möchte, wie unten eine Regel durch eine Anfrage hinzuzufügen:
{
"name":"Foo",
"ips":["192.168.1.40", "4.4.4.4", "8.8.8.8"]
}
Auch ich will ip in jede Anforderung konstruieren (es gibt keine uRL eine IP direkt zu konstruieren) für neue Regel, so habe ich eine Klasse für Manager wie folgt geschrieben:
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 in Serializer konnte ich keinen richtigen Weg finden, dies zu zeigen, ich habe einen Serializer wie folgt geschrieben:
class RuleSerializer(serializers.Serializer):
name = serializers.CharField()
ips = serializers.SlugRelatedField(many=True, slug_field='address', validators=[], queryset=models.IPAddress.objects.all())
Aber das Problem ist es die IP-in Anfrage bestätigt, und wenn es nicht so IP ist es einen Fehler zurückgibt, obwohl ich die Validatoren eine leere Liste gesetzt habe.
Ich habe zwei Fragen, wie kann ich diese Validierung deaktivieren? Und ist mein Weg, um die Serializer für das Schreiben und das Modell für mein Szenario geeignet ist (ich konnte die Anforderung nicht ich ändern und die Antwort, die ich senden muss)
Sie benötigen die verschachtelten Serializer für die Erstellung der 'ips' über API oder Sie benötigen es nur zum Lesen, wo ips bereits erstellt werden. – AKS