我在Django REST Framework网站的教程中找不到任何关于如何实现这一点的信息,但我没有在文档中找到它,尽管我确定它在某处.
我希望issues成为父资源并成为子资源,pages以便/issues/1/pages返回所有issue_id1的页面.
有没有一种使用基于通用类的视图实现此目的的好方法?
这是我到目前为止所拥有的.
RESTAPI/urls.py:
from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from restAPI import views
urlpatterns = patterns('',
url(r'^issues/$', views.IssueList.as_view()),
url(r'^issues/(?P<pk>[0-9]+)/$', views.IssueDetail.as_view()),
url(r'^issues/(?P<issue_id>[0-9]+)/pages/$', views.PageList.as_view()),
url(r'^pages/(?P<pk>[0-9]+)/$', views.PageDetail.as_view()),
)
urlpatterns = format_suffix_patterns(urlpatterns)
Run Code Online (Sandbox Code Playgroud)
RESTAPI/models.py:
from django.db import models
class Issue(models.Model):
created = models.DateTimeField(auto_now_add=True)
revision = models.IntegerField(default = 1)
issue_date = models.DateTimeField(auto_now_add=True)
issue_image_url = models.CharField(max_length=100)
class Page(models.Model):
created = models.DateTimeField(auto_now_add=True)
page_number = models.IntegerField()
standard_page_url = models.CharField(max_length=100, default='')
large_page_url = models.CharField(max_length=100, default='') …Run Code Online (Sandbox Code Playgroud) 我正在尝试安装我的第一个脚手架Yesod应用程序.当我运行cabal-dev install && yesod --dev devel它失败时使用ExitFailure 1.我使用sqlite进行持久化.
Application.hs:49:44:
No instance for (monad-logger-0.3.1:Control.Monad.Logger.MonadLogger
IO)
arising from a use of `runMigration'
Possible fix:
add an instance declaration for
(monad-logger-0.3.1:Control.Monad.Logger.MonadLogger IO)
In the second argument of `Database.Persist.Store.runPool', namely
`(runMigration migrateAll)'
In a stmt of a 'do' block:
Database.Persist.Store.runPool dbconf (runMigration migrateAll) p
In the expression:
do { manager <- newManager def;
s <- staticSite;
dbconf <- withYamlEnvironment
"config/sqlite.yml" (appEnv conf) Database.Persist.Store.loadConfig
>>= Database.Persist.Store.applyEnv;
p <- Database.Persist.Store.createPoolConfig
(dbconf :: PersistConfig);
.... } …Run Code Online (Sandbox Code Playgroud) 我有一个ModelForm类,我想language从表单中排除一个字段()并以编程方式添加它.我尝试在clean方法中添加语言,但得到了一个IntegrityError("Column 'language_id' cannot be null").我假设这是因为language返回的任何数据clean()都将被忽略,因为它在排除元组中.我在ModelAdmin课堂上使用这个表格.我没有找到任何方法来处理这个,所以任何提示或提示将非常感激.
from django import forms
from myapp import models
from django.contrib import admin
class DefaultLanguagePageForm(forms.ModelForm):
def clean(self):
cleaned_data = super(DefaultLanguagePageForm, self).clean()
english = models.Language.objects.get(code="en")
cleaned_data['language'] = english
return cleaned_data
class Meta:
model = models.Page
exclude = ("language",)
class PageAdmin(admin.ModelAdmin):
form = DefaultLanguagePageForm
Run Code Online (Sandbox Code Playgroud) 我正在尝试为使用Django REST Framework编写的REST API编写一些功能测试.然而,它并不是特定于该框架,因为它主要是一般的Django.
这就是我想要做的
setUp在测试类的方法中创建用户tests.py
from django.test import LiveServerTestCase
from django.contrib.auth.models import User
from django.test.client import Client
from rest_framework.authtoken.models import Token
class TokenAuthentication(LiveServerTestCase):
def setUp(self):
user = User.objects.create(username='foo', password='password', email="foo@example.com")
user.save()
self.c = Client()
def test_get_auth_token(self):
user = User.objects.get(username="foo")
print user # this outputs foo
print Token.objects.get(user_id = user.pk) # this outputs a normal looking token
response = self.c.post("/api-token-auth/", {'username': 'foo', 'password': 'password'})
print response.status_code # this outputs 400
self.assertEqual(response.status_code, 200, "User couldn't log in")
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,它返回状态400而不是200,因此用户未经过身份验证.如果我输入已经在数据库中的用户的凭据,它会通过.所以我假设在测试类中创建的记录只能在它自己的方法中访问,这可能是因为它是为单元测试而设计的.但是我使用数据库中的数据来执行测试,如果数据发生变化,它将失败. …
django functional-testing django-testing django-rest-framework