pracuję nad API dla projektu i mam relacjami Order/produktów poprzez OrderProducts tak:django-tastypie - Jak zrobić manytomany przez związek
W katalogu/models.py
class Product(models.Model):
...
W zamówieniu/models.py
class Order(models.Model):
products = models.ManyToManyField(Product, verbose_name='Products', through='OrderProducts')
...
class OrderProducts(models.Model):
order = models.ForeignKey(Order)
product = models.ForeignKey(Product)
...
teraz, kiedy załadować zamówieniu przez API chciałbym uzyskać related Products, tak więc to próbowałem (z django tastypie):
W celu/api.py
class OrderResource(ModelResource):
products = fields.ToManyField('order.api.OrderProductsResource', products, full=True)
class Meta:
queryset = Order.objects.all()
resource_name = 'order'
class OrderProductsRessource(ModelResource):
order = fields.ToOneField(OrderResource, 'order')
class Meta:
queryset = OrderProducts.objects.all()
resource_name = 'order/products'
który daje mi ten komunikat o błędzie: "obiekt 'produkt' ma atrybut 'zamów'". Nie jestem więc pewien, co jest nie tak lub brakuje jej, to prawdopodobnie wymaga czegoś w moim zasobie produktu, ale próbowałem na kilka sposobów bez powodzenia. Każda pomoc będzie mile widziane :)
Prawdopodobnie nadal brakuje mi czegoś, ale nie widzę, do jakiego pola ma używać ToOneField lub do czego ma powrócić M2M? – djevg
Potrzebujesz 'ProductResource', a nie' OrderProductResource'. To Twój problem. To tak, jak konfigurowanie M2M na samym modelu. Nie wykonujesz 'models.ManyToManyField (OrderProduct)'; robisz 'models.ManyToManyField (Product)'. To samo tutaj, tworzysz 'ToManyField' z linkiem do' ProductResource', który zwraca 'Product's. –
Ok, rozumiem;) Z pewnych powodów myślałem, że muszę przedefiniować całą relację w API, ale jest to mądrzejsze ... Dzięki za pomoc. – djevg