Как разработать Django API для обработки формы «Dynami c»? - PullRequest
0 голосов
/ 27 марта 2020

Я построил Angular форму, которая содержит массив форм. Таким образом, пользователь имеет право добавлять поля или удалять поля из формы. Я пытаюсь понять, как я могу разработать Django API, который может обрабатывать сообщения для такой динамической формы c?

Я не хочу, чтобы пользователь создавал учетную запись на веб-сайте. для того, чтобы разместить свой заказ. Это вообще возможно?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Для меня я использовал Django -RESTframework для построения API.

Чтобы достичь этого, достаточно просто создать модель и выполнить итерации по элементам, которые являются частью Dynami c, и назначьте поле Foreignkey созданному obj.id. Сначала я создал основной экземпляр модели, а затем создал экземпляры дочерних экземпляров. Я буду использовать Order и Item для демонстрации идеи. Экземпляр Item будет иметь поле Foreinkey для модели Order.

В модели Item добавьте аргумент related_name в поле Foreinkey

order = models.ForeignKey(Order, related_name='items',on_delete=models.CASCADE)

serializers.py

class ItemSerializer(serializers.ModelSerializer):
class Meta:
    model = Item
    fields = [
        ....your fields...
    ]



class OrderSerializer(serializers.ModelSerializer):
items = ItemSerializer(many=True)
class Meta:
    model = Order
    fields = [
        'order', ....

    ]

def create(self, validated_data):
    items_data = validated_data.pop("items")
    order = Order.objects.create(**validated_data)
    order.total_fees = order.delivery_fees
    for item in items_data:
        i = Item.objects.create(order=order, **item)

    return order
0 голосов
/ 27 марта 2020

Вы должны быть более озабочены тем, как моделировать свои данные, чем думать о своем интерфейсе. Вот несколько вариантов моделирования ваших данных:

  • Первый вариант - использовать обычную Django ORM, и в этом случае вы можете использовать JSONField для любые свойства Dynami c.

  • Второй вариант - использовать любую модель данных без схемы, например базы данных на основе документов (например, MongoDB ).

Вот простой пример того, как использовать Django JSONField:

вашу модель:

class Order(models.Model):
    customer = models.ForeignKey(User, on_delete=models.CASCADE)
    #any additional static fields  
    properties = JSONField()

ваш взгляд:

def create_order_view(request):
    if request.method == "POST":
        #do your validation
        Order.objects.create(user=request.user, properties=request.POST["properties"])
        return Response(status=200)

этот пример полностью неполон, так как вам нужно добавить обработку ошибок проверки, и лучше использовать Django rest-framework для создания вашего API.

Наконец, как я уже сказал, есть много вариантов для моделирования ваших данных, в дополнение к тому, что я упомянул выше, есть много других. Чтобы решить, какую модель использовать, вы должны знать, как будут использоваться ваши данные, чтобы вы могли оптимизировать время запроса, кроме того, есть много других факторов, но это выходит за рамки этого ответа.

...