Python Django Rest API ManyToMany在API中没有给出任何[]
目前,我试图从API中获取配方。我有一个包含两个表的数据库,一个表包含配方和它们的id,但没有成分,另一个表包含成分和配方id。现在我找不到API“结合”这些的方法。可能是因为我在配方id中添加了成分模型中的相关名称,但我必须这样做,否则会出现以下错误:Python Django Rest API ManyToMany在API中没有给出任何[],python,python-3.x,django,django-models,django-rest-framework,Python,Python 3.x,Django,Django Models,Django Rest Framework,目前,我试图从API中获取配方。我有一个包含两个表的数据库,一个表包含配方和它们的id,但没有成分,另一个表包含成分和配方id。现在我找不到API“结合”这些的方法。可能是因为我在配方id中添加了成分模型中的相关名称,但我必须这样做,否则会出现以下错误: ERRORS: recipes.Ingredients.recipeid: (fields.E303) Reverse query name for 'Ingredients.recipeid' clashes with field name
ERRORS:
recipes.Ingredients.recipeid: (fields.E303) Reverse query name for 'Ingredients.recipeid' clashes with field name 'Recipe.ingredients'.
HINT: Rename field 'Recipe.ingredients', or add/change a related_name argument to the definition for field 'Ingredients.recipeid'.
模型
当没有问题时,它必须在序列化程序或视图中
序列化程序
看法
但我想要的是,例如id为0的配方和所有配方id为0的配料。
我真的希望你能帮助我。非常感谢你 从
如果希望Django不创建向后关系,请将相关的\u name
设置为'+'
或以'+'
结束
因此,将成分的相关名称更改为
class Ingredients(models.Model):
# rest of the fields
recipeid = models.ForeignKey(
'Recipe',
models.DO_NOTHING,
db_column='recipeid',
blank=True,
null=True,
related_name="ingredients_ref" # Changed the related name
)
请注意,在这里,我添加了两个名为components\u forward
和components\u backward
的字段,因为Recipe
和components
之间存在两种类型的关系,我不确定您在寻找哪种类型的关系。您是否遇到了任何错误或其他问题?有几件事:您可以遵循暗示而不是做你认为正确的事。如果您不理解提示,请查看Django文档。其次,您的配方模型被标记为托管,而您的配料模型未被托管。这是故意的吗?我假设它们都是未管理的,这就引出了一个问题:为什么要使用Django?最后,要回答您关于JSON可序列化性的问题,请检查Django Rest框架。@Bobort我多次阅读了文档,但文档中只提供了一个多对多的示例,其中包含他们正在填充的数据库。我的数据库已经满了,我正在寻找一种方法来“组合”数据。目前我不知道问题在哪里,我只想知道它是在模型中还是在API本身中。正因为如此,我尝试更改不同的值,但我不能100%确定它们是否正确。谢谢你,它是有效的。但是,我是否正确地理解,我需要从配方中反向获得配料?我该如何使用成分转发?根据您的模型结构,两者在您的情况下都是不同的。我想知道你为什么需要配料。首先,我不知道你的意思。我需要配方id,因为它是recipeOkay的唯一参考,那么现在有什么问题?我只想了解向前和向后的成分是什么。
class IngredientsSerializer(serializers.ModelSerializer):
# ingredients = serializers.CharField(source='ingredients__ingredients')
class Meta:
model = Ingredients
fields = ['ingredient','recipeid']
class FullRecipeSerializer(serializers.ModelSerializer):
ingredients = IngredientsSerializer(many=True)
class Meta:
model = Recipe
fields = ['title','ingredients']
class FullRecipesView(generics.ListCreateAPIView):
serializer_class = FullRecipeSerializer
permission_classes = [
permissions.AllowAny
]
queryset = Recipe.objects.all()
class Ingredients(models.Model):
# rest of the fields
recipeid = models.ForeignKey(
'Recipe',
models.DO_NOTHING,
db_column='recipeid',
blank=True,
null=True,
related_name="ingredients_ref" # Changed the related name
)
class FullRecipeSerializer(serializers.ModelSerializer):
ingredients_forward = IngredientsSerializer(many=True, source="ingredients")
ingredients_backward = IngredientsSerializer(many=True, source="ingredients_ref")
class Meta:
model = Recipe
fields = ['title', 'ingredients_forward', 'ingredients_backward']