Wejściowy JSON

0

Witam serdecznie.

Mam utworzyć wejście na serwerze w postaci json w django rest framework następujące:

input payload:
{
invoice_num : “faktura 1/2022”,
issuer : “IT Company, address, NIP 424234242”,
header : “COmpany name, address, NIP 332423324”,
notes : “Split payment ”,
lines : [
{
name : “uslugi programistyczne”,
net : 1000,
tax : 22
},
{
name : “hosting”,
net : 100,
tax : 22
}
]
}

a ja obecnie mam

{
    "id": 22,
    "invoice_num": "faktura 12-2022",
    "issuer": "IT Company, address, NIP 424234242",
    "header": "COmpany name, address, NIP 332423324",
    "notes": "Split payment",
    "lines": []
},

Jak mam skonfigurować django models i serializer żeby input był taki jak na początku napisałem. Ze słownikiem pod zmienna Lines

1

Nie wiem za mało danych, pokaż kod. many=True może w serializerze.

46

Pokaż jak zdefiniowałeś serializer oraz w jaki sposób handlujesz view.

0
class EndpointSerializer(serializers.ModelSerializer):
    # lines = serializers.HyperlinkedRelatedField(
    #     many=True, view_name='lines', read_only=True)

    class Meta:
        model = Endpoint
        fields = ['id', 'invoice_num', 'issuer', 'header', 'notes', 'lines']


        View:
        
class EndpointViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    lines = models.ForeignKey(Line, related_name='lines', on_delete=models.CASCADE)
    queryset = Endpoint.objects.all()
    serializer_class = EndpointSerializer
    permission_classes = [permissions.AllowAny]
    # permission_classes = [permissions.IsAuthenticated]

    Models:

class Endpoint(models.Model):
    invoice_num = models.CharField(max_length=100)
    issuer = models.CharField(max_length=100)
    header = models.CharField(max_length=100)
    notes = models.CharField(max_length=100)

    def __str__(self):
        return self.invoice_num

class Line(models.Model):
    lines = models.ForeignKey(Endpoint, on_delete=models.CASCADE, blank=True, null=True, related_name='lines')
    name = models.CharField(max_length=100)
    net = models.IntegerField()
    tax = models.IntegerField()

    def __str__(self):
        return str(self.id) +' '+self.name

46

Coś takiego powinno pomóc:

class LineSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Line
        fields = "__all__"

class EndpointSerializer(serializers.ModelSerializer):
    lines = LineSerializer(many=True)

    class Meta:
        model = Endpoint
        fields = ['id', 'invoice_num', 'issuer', 'header', 'notes', 'lines']
0

Teraz jak wchodze w api to taki komunikat mi sie wyswietla

A jak doddam przez panel administracyjny Line i relacje do Endpoint ustawie i wchodze w api to taki błąd mi sie wyswietla:

AssertionError at /endpoint/

("Creating a ModelSerializer without either the 'fields' attribute or the 'exclude' attribute has been deprecated since 3.3.0, and is now disallowed. Add an explicit fields = '__all__' to the LineSerializer serializer.",)

ok teraz dziala. Dziękuje bardzo

0

jak próbuje wyslać post żeby dodać nową pozycje to wyskakuje mi taki błąd: bo lines sie nie da dodac bo sie formularz nie wyswietla

{
    "status": "error",
    "data": {
        "lines": [
            "This field is required."
        ]
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1