在 Django 1.5 中建模多个字段查找
Posted
技术标签:
【中文标题】在 Django 1.5 中建模多个字段查找【英文标题】:Model multiple field-lookup in Django 1.5 【发布时间】:2013-04-13 21:07:41 【问题描述】:我有模特
class ModelName(models.Model):
type = models.ForeignKey(AnotherModel)
slug = models.SlugField(editable=False)
class Meta:
unique_together = (('type', 'slug'),)
@models.permalink
def get_absolute_url(self):
return ('model_detail', (), 'type': self.type.slug, 'slug': self.slug)
和网址
urlpatterns = patterns('',
url(r'^(?P<type>[-\w]+)/(?P<slug>[-\w]+)/$', ModelDetailView.as_view(), name='detail'),
)
还有一个详细视图
class ModelDetailView(DetailView):
model = MyModel
template_name = 'detail.html'
但我得到异常 MultipleObjectsReturned 因为 slug 不是唯一的。我希望 url 为 /type/slug/
,因此模型可以包含两个具有相同 slug 但类型不同的记录,因此 url 可以是 /1/slug/
和 /2/slug/
具有不同的结果。如何告诉模型同时使用类型和 slug 作为查找,而不仅仅是 slug?
【问题讨论】:
【参考方案1】:您不必“告诉模型”使用类型和字符串字段——这是您必须覆盖的基于类的视图。
我建议您重写get_queryset
方法,以将查询集限制为正确类型的对象。另一种方法是覆盖get_object
方法。
class ModelDetailView(DetailView):
model = MyModel
template_name = 'detail.html'
def get_queryset(self):
"""
Restrict queryset to objects of the correct type
"""
return MyModel.objects.filter(type_id=self.kwargs['type'])
有关详细信息,请参阅dynamic filtering 上的 Django 文档。
【讨论】:
以上是关于在 Django 1.5 中建模多个字段查找的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中,如何使用动态字段查找过滤 QuerySet?
确定在特定 django 字段管理员中查找哪些字段(select2)