我正在使用 Django Rest Framework 為烹飪書制作 API。我不知道如何設計成分模型使資料變成這樣:
{
"id": 1,
"name": "spaghetti",
"recipe": "recipe",
"ingredients": [
[{name:'pasta',amount:100},{name:'tomato',amount:200},{...}]
],
}
我的型號:
class Meal(models.Model):
name = models.TextField()
recipe = models.TextField()
ingredients = ?
還有如何序列化這個欄位?
uj5u.com熱心網友回復:
您可以為成分創建單獨的模型。
多對多的關系對我來說是最好的,因為一頓飯可以有很多成分,相反,一種成分可以用來做很多飯。
根據django docs,在您的情況下:
模型.py
from django.db import models
class Ingredient(models.Model):
name = models.CharField(max_length=90)
amount = models.FloatField()
class Meta:
ordering = ['name']
def __str__(self):
return self.name
class Meal(models.Model):
name = models.CharField(max_length=100)
recipe = models.CharField(max_length=100)
ingredients = models.ManyToManyField(Ingredient)
class Meta:
ordering = ['name']
def __str__(self):
return self.name
序列化程式.py
class IngredientSerializer(serializers.ModelSerializer):
class Meta:
model = Ingredient
fields = '__all__'
class MealSerializer(serializers.ModelSerializer):
ingredients = IngredientSerializer(read_only=True, many=True)
class Meta:
model = Meal
fields = '__all__'
uj5u.com熱心網友回復:
我相信你正在尋找的是 JsonBField
from django.contrib.postgres.fields.jsonb import JSONField as JSONBField
ingredients = JSONBField(default=list,null=True,blank=True)
這應該符合您的期望,祝您有美好的一天
編輯:感謝@?a?atay Bar?n 在下面提到的更新僅供參考,它已被棄用,請改用 django.db.models.JSONField。請參閱 檔案
uj5u.com熱心網友回復:
從 django-3.1, Django 自帶 JSONField
class Meal(models.Model):
name = models.TextField()
recipe = models.TextField()
ingredients = models.JSONField()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/342467.html
下一篇:我如何繪制漸近線
