python-3.x 如何将数组存储为表中的单独条目?

ev7lccsx  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(111)

我最近开始学习Django,我已经被这种情况困扰了几天了。
我从FE接收到以下JSON:

{
    "name":"headphones",
    "color" : [
       "green",
       "black"
    ]
}

我正在努力寻找一种方法来将它存储在DB中。我有这两个表:
| 身份证|姓名|
| - ------|- ------|
| 1个|耳机|
| 身份证|颜色|产品标识|
| - ------|- ------|- ------|
| 1个|绿色|1个|
| 第二章|黑色|1个|
我尝试过连接表和bulky_create,但是我无法将来自JSON的color数组作为单独的条目存储在colors表中,我使用的是sqlite3和rest-framework。
以下是模型:

class Product(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)
    stock = models.IntegerField(default=0)

    def __str__(self):
        return self.product

class Color(models.Model):
    product_id = models.ForeignKey(Product, on_delete=models.CASCADE)
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30)
    isAvailable = models.BooleanField(default=False)

    def __str__(self):
        return self.color

我如何构建我的模型来实现这一点呢?谢谢!

qnakjoqk

qnakjoqk1#

如果你FE和模型是正确的,你可以完成如下的创建操作:

class ProductSerializer(serializers.ModelSerializer):
  color = serializers.ListField(child=serializers.CharField(max_length=250), write_only=True)
  class Meta:
    model = Product
    fields = ['id', 'name', 'color']

  def create(self, validated_data):
    colors = validated_data.pop("color")
    product = Product.objects.create(
        **validated_data
    )
    for color in colors:
        Color.objects.create(
            name=color, product_id = product 
        )
    return product

相关问题