Сохраняйте данные в таблицах внешнего ключа, используя django rest framework - PullRequest
0 голосов
/ 23 октября 2019

У меня есть 3 таблицы в последовательности с внешними ключами, как это

1-я таблица

class Orders(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, blank=True, null=True)
    order_number = models.AutoField(primary_key=True)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)

2-я таблица, в которой будет вестись запись статейна продажу

class OrderArticle(models.Model):
    order = models.ForeignKey(Orders, on_delete=models.CASCADE)
    article = models.ForeignKey(Articles, on_delete=models.CASCADE)
    article_quantity=models.IntegerField(default=0)
    prize=models.DecimalField(max_digits=10, decimal_places=2)

3-я таблица - это опция Статей, которую можно добавлять к статьям, каждая статья имеет свои опции

class OrderArticleOptions(models.Model):
    article_option = models.ForeignKey(ArticlesOptions, on_delete=models.CASCADE)
    order_article = models.ForeignKey(OrderArticle, on_delete=models.CASCADE)
    article_option_quantity = models.IntegerField(default=0)
    price = models.DecimalField(max_digits=10, decimal_places=2)

Теперь я хочучтобы добавить данные в это с помощью Django rest Framework. Я добавляю данные в Таблица заказов вот так

Serilizer.py is

class OrderSerializer(serializers.ModelSerializer):
    restaurant=RestaurantSerializer(required=False)
    article=ArticlesSerializer(read_only=True, source='orderarticle_set' , many=True)
    total_amount=serializers.DecimalField(required=False,max_digits=5, decimal_places=2)
    tableid=serializers.IntegerField(required=False)
    class Meta:
        model = Orders
        fields = [   'order_number' , 'tableid' , 'total_amount' , 'ordertime' , 'order_status' ,'restaurant', 'article' ,]

    def create(self, validated_data):
        tableid = validated_data.get('tableid')
        total_amount = validated_data.get('total_amount')
        order_status = validated_data.get('order_status')
        restaurant = validated_data.get('restaurant')

        order_obj = Orders.objects.create(tableid=tableid,
                                                       total_amount=total_amount,order_status=order_status,
                                                        restaurant=restaurant
                                                       )

        return order_obj

И мой view.py - это

class CreateOrderApi(APIView):
    def post(self, request,restid):

        serializer = OrderSerializer( data=request.data)
        if serializer.is_valid():
            obj_order = serializer.save(restaurant=Restaurant.objects.get(id=restid))

Итак, теперь я хочу добавить данные во все три таблицы, соотношение в одном порядке: у меня может быть несколько статей, а в одной статье - несколько вариантов. ,Что будет лучшим решением для этого, чтобы хранить все данные в 1 почтовый звонок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...