En Django y Tastypie Estoy tratando de encontrar la manera de tratar adecuadamente con muchos a muchos "a través de" relaciones, como las que se encuentran aquí: https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationshipsdjango-tastypie y muchos a muchos "a través de" relaciones
Aquí están mis modelos de ejemplo:
class Ingredient(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class RecipeIngredients(models.Model):
recipe = models.ForeignKey('Recipe')
ingredient = models.ForeignKey('Ingredient')
weight = models.IntegerField(null = True, blank = True)
class Recipe(models.Model):
title = models.CharField(max_length=100)
ingredients = models.ManyToManyField(Ingredient, related_name='ingredients', through='RecipeIngredients', null = True, blank = True)
Ahora mi archivo api.py:
class IngredientResource(ModelResource):
ingredients = fields.ToOneField('RecipeResource', 'ingredients', full=True)
class Meta:
queryset = Ingredient.objects.all()
resource_name = "ingredients"
class RecipeIngredientResource(ModelResource):
ingredient = fields.ToOneField(IngredientResource, 'ingredients', full=True)
recipe = fields.ToOneField('RecipeResource', 'recipe', full=True)
class Meta:
queryset= RecipeIngredients.objects.all()
class RecipeResource(ModelResource):
ingredients = fields.ToManyField(RecipeIngredientResource, 'ingredients', full=True)
class Meta:
queryset = Recipe.objects.all()
resource_name = 'recipe'
estoy tratando de basar mi código en este ejemplo: http://pastebin.com/L7U5rKn9
Desafortunadamente, con este código me sale este error:
"error_message": "'Ingredient' object has no attribute 'recipe'"
¿Alguien sabe lo que está pasando aquí? ¿O cómo puedo incluir el nombre del ingrediente en RecipeIngredientResource? ¡Gracias!
EDIT:
que puede haber encontrado el error mismo. ToManyField debe dirigirse hacia Ingredient y no RecipeIngredient. Veré si esto hace el trabajo.
EDITAR:
Nuevo error ... alguna idea? El objeto '' tiene un atributo 'título' vacío y no permite un valor predeterminado o nulo.
Incluya los puntos importantes de la respuesta aquí, en esta publicación. Stack Overflow no está aquí para ser un depósito de enlaces a cosas, sino para ser un depósito de respuestas. Esta es también una forma muy inapropiada de promocionar tu blog. –
Duh, Ok, .. Copiaré la respuesta aquí ... Porque la publicación es demasiado larga ... – Yeo
El enlace parece estar muerto en este momento – msc