In Django e Tastypie sto cercando di capire come trattare correttamente con molti a molti "attraverso" i rapporti, come quelli trovati qui: https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationshipsdjango-tastypie e molti a molti "attraverso" relazioni
Ecco i miei modelli di esempio:
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)
Ora il mio file 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'
sto cercando di basare il mio codice su questo esempio: http://pastebin.com/L7U5rKn9
Purtroppo, con questo codice ottengo questo errore:
"error_message": "'Ingredient' object has no attribute 'recipe'"
Qualcuno sa cosa sta succedendo qui? O come posso includere il nome dell'ingrediente in RecipeIngredientResource? Grazie!
EDIT:
forse ho trovato me stesso l'errore. ToManyField deve essere indirizzato verso Ingredient e non RecipeIngredient. Vedrò se questo fa il lavoro.
MODIFICA:
Nuovo errore ... qualche idea? L'oggetto "" ha un attributo vuoto "titolo" e non consente un valore predefinito o nullo.
Si prega di includere i punti importanti della risposta qui, su questo post. Stack Overflow non è qui per essere un deposito di collegamenti a cose, ma per essere un deposito di risposte. Questo è anche un modo molto inappropriato per promuovere il tuo blog. –
Duh, Ok, .. Ho copiato la risposta qui ... Perché il post è troppo lungo ... – Yeo
Link sembra essere morto al momento – msc