我正在为django观点编写单元测试.我观察到我的一个视图返回重定向代码301,这是不期望的.
这是我之前提到的views.py.
def index(request):
return render(request, 'index.html',
{'form': QueryForm()})
def query(request):
if request.is_ajax():
form = QueryForm(request.POST)
return HttpResponse('valid')
Run Code Online (Sandbox Code Playgroud)
以下是urls.py.
urlpatterns = patterns('',
url(r'^$', 'core.views.index'),
url(r'^query/$', 'core.views.query')
)
Run Code Online (Sandbox Code Playgroud)
并且单元测试将失败.
def so_test(self):
response = self.client.post('/')
self.assertEquals(response.status_code, 200)
response = self.client.post('/query', {})
self.assertEquals(response.status_code, 200)
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么返回状态301?
嗨,
在管理面板中,我创建了用于添加产品的表单.表单包括2个内联表单集,因为有一些与产品相关的模型.用户可以创建产品,然后定义该产品的不同属性的变体.我将举例说明这一点.用户有一个3种不同颜色的T恤,并希望以不同的价格添加它们.T恤是作为具有3种变化的产品而创建的.
class Detail(models.Model):
product = models.ForeignKey('Product')
attribute = models.ForeignKey('Attribute')
value = models.CharField(max_length=500)
class Attribute(models.Model):
name = models.CharField(max_length=300)
class Variant(models.Model):
product = models.ForeignKey(Product)
details = models.ManyToManyField(Detail)
quantity = models.IntegerField()
price = models.DecimalField(max_digits=6, decimal_places=2)
Run Code Online (Sandbox Code Playgroud)
我省略了产品,因为它无关紧要.
class DetailInline(admin.TabularInline):
model = Detail
class VariantInline(admin.StackedInline):
model = Variant
class ProductAdmin(admin.ModelAdmin):
class Meta:
model = Product
inlines = [DetailInline, VariantInline]
Run Code Online (Sandbox Code Playgroud)
这很好用,模型保存得很好,我确实有Variants内联的问题.变量内联显示详细信息对象,但仅显示已保存在数据库中的对象.为了使用户的生活更加轻松,可以在创建Detail对象时将Detail对象添加到Variant内联,因此必须在保存Product之前进行.
我试图通过使用js将条目注入内联但是这是hackish并且Django没有使用伪值来验证formset抛出错误,选择了错误的值.
在我写这个问题时,我想到了最后的想法.如果更改了对象的内联形式,则可以创建js,将数据传递到自定义视图,该视图将创建对象并返回结果.我看到的一个问题(旁边感觉不对)是如何通知django创建了新对象,因此它不会引发有关非现有值的错误.
无论如何,我希望有人能理解这个长期的问题.
我参与了使用选项卡的python项目,但是我没有在我编写的其他所有代码中使用它们,在特定项目中使用它们至关重要.项目位于特定目录下的一个目录中.IE:
\main_folder
\project1
\project2
\project3
...etc
Run Code Online (Sandbox Code Playgroud)
我有几个函数/钩子打开文件并保存untabify并列出我正在处理的整个缓冲区.
;; My Functions
(defun untabify-buffer ()
"Untabify current buffer"
(interactive)
(untabify (point-min) (point-max)))
(defun tabify-buffer ()
"Tabify current buffer"
(interactive)
(tabify (point-min) (point-max)))
;; HOOKS
; untabify buffer on open
(add-hook 'find-file-hook 'untabify-buffer)
; tabify on save
(add-hook 'before-save-hook 'tabify-buffer)
Run Code Online (Sandbox Code Playgroud)
如果我把它放在.emacs文件中,它会在我打开的每个.py文件上运行,这不是我想要的.我想要的是将这些钩子仅用于具有相应子文件夹的一个特定文件夹中.尝试.dir_locals,但它只适用于不挂钩的属性.我不能在特定模式(即python-mode)中使用钩子,因为几乎所有项目都是用python编写的.说实话,我尝试编写elisp条件保存但失败了.