Django View with ForeignKey model



我在models.py:

class ArticleCategory(models.Model):
    category_name = models.CharField("Category", max_length=200, unique=True)
    slug = models.SlugField(null=True, blank=True, unique=True)
    def get_data(self):
        return {
            "id": self.pk,
            "category_name": self.category_name,
            "slug": self.slug,
        }
class Article(models.Model):
    category = models.ForeignKey(ArticleCategory)
    ...
    def get_data(self):
        return {
            "id": self.pk,
            ...
        }

views.py:

def articles(request, *args, **kwargs):
    context = {
        'categories': ArticleCategory.objects.all(),
        'articles': Article.objects.filter(category__id=2)
    }
    return render(request, 'wellness.html', context)

一切都很好。但是,我希望category__id是动态的,所以我将函数更改为def articles(request, id, *args, **kwargs)'articles': Article.objects.filter(category__id=id)似乎它是与以前的项目为我工作,但现在它抛出的错误,每次我试图设置这样的行为(尝试id, slug, category_name):

Exception Type:     TypeError
Exception Value:    articles() takes at least 2 arguments (1 given)
Exception Location:     .../env/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py in _wrapped_view, line 23

也许url .py的东西?

from django.contrib.auth.decorators import login_required
...
urlpatterns = [
    ...
    url(r'^wellness$', login_required(articles), name='wellness'),
    ...
]

确实在你的url .py中。

您定义了一个视图,它期望两个参数,但没有配置url函数来捕获url的一部分,并将其作为request旁边的附加参数传递。

您想要做这样的事情来分别捕获一个slug或id:

<标题>蛞蝓h1> 与id:搭配使用
urlpatterns = [
    url(r'^wellness/(?P<id>[0-9]+)/$', login_required(articles), name='wellness'),
]

您可以在文档中找到更多信息

最新更新