我正在使用Django Rest框架构建REST Web API。 我在类别和钱包之间有多对多的关系。 从类别开始,我检索它链接到的所有钱包,从shell中一切正常
型号:
class Wallet(models.Model):
nome = models.CharField(max_length=255)
creato = models.DateTimeField(auto_now=False)
utente = models.ForeignKey(User)
wallettype = models.ForeignKey(Wallettype)
payway = models.ManyToManyField(Payway, through = 'Wpw', blank = True)
defaultpayway = models.ForeignKey('Wpw', related_name = 'def_pw', null = True)
def __unicode__(self):
return self.nome
class Category(models.Model):
nome = models.CharField(max_length=255)
creato = models.DateTimeField(auto_now=False)
enus = models.ForeignKey(Enus)
wallet = models.ManyToManyField(Wallet)
utente = models.ForeignKey(User)
owner = models.ManyToManyField(User, related_name='owner_cat')
的url:
urlpatterns = patterns(
'',
url(r'^$', views.cat_list.as_view()),
url(r'^/(?P<pk>[0-9]+)/*$', views.cat_detail.as_view()),
url(r'^/(?P<cat_id>[0-9]+)/wallets/*$', views.cwallet_list.as_view()),
url(r'^/(?P<cat_id>[0-9]+)/wallets/(?P<pk>[0-9]+)/*$', views.cwallet_detail.as_view(), name='cwallet-detail'),
)
串行:
class cat_serializer(serializers.ModelSerializer):
wallet = serializers.HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='cwallet-detail',
# lookup_field = 'pk',
# lookup_url_kwarg = 'pk'
)
subcat_count = serializers.IntegerField(
source='subcategory_set.count',
read_only=True
)
class Meta:
model = Category
fields = ('id', 'nome','wallet','subcat_count')
我打电话的时候:
GET http://localhost:8000/categories/77/wallets
我想检索:
{
'nome': 'Dinner',
'subcat_count': 12,
'wallet': {
'http://localhost:8000/77/wallet/1',
'http://localhost:8000/77/wallet/2',
'http://localhost:8000/77/wallet/3',
}
}
但它不起作用我得到这个错误:
“无法使用视图名称”cwallet-detail“解析超链接关系的URL。您可能未能在API中包含相关模型,或者在此字段上错误地配置了lookup_field
属性。”
我认为这个问题与额外的参数相关联:实际上在我的urls.py中,我有钱包ID的pk和类别ID的cat_id。 我无法想象如何将类别ID传递给'cwallet-detail'。
有人知道如何将第二个参数传递给HyperlinkedRelatedField吗? 提前谢谢。
答案 0 :(得分:1)
阅读文档并在new issue上发布Tom Christie's Django REST github后,现在我知道它没有得到官方支持,但是doumentations和补丁正在进行中。
实际上有 this link 用于构建自定义超链接归档来解决问题。
希望这可以帮助有同样问题的人。