如何为从模型的现有对象中获取的字段设置默认值?
我尝试过这些并没有奏效:
1)
class ModelA(models.Model):
fieldA = models.CharField(default=self.get_previous())
def get_previous(self):
return ModelA.objects.all()[0].fieldA
Run Code Online (Sandbox Code Playgroud)
NameError: name 'self' is not defined
2)
class ModelA(models.Model):
fieldA = models.CharField(default=ModelA.get_previous())
@staticmethod
def get_previous():
return ModelA.objects.all()[0].fieldA
Run Code Online (Sandbox Code Playgroud)
NameError: name 'ModelA' is not defined
3)
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
def get_previous():
return ModelA.objects.all()[0].fieldA
Run Code Online (Sandbox Code Playgroud)
NameError: global name 'get_previous' is not defined
4)
def get_previous():
return ModelA.objects.all()[0].fieldA
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
Run Code Online (Sandbox Code Playgroud)
NameError: global name 'ModelA' is not defined
我很清楚为什么3)和4)不起作用.我可以想象为什么1)不会起作用 - 看起来类'本能不能引用实例(即自我).我可以想象为什么2)不起作用 - 显然没有对ModelA的引用,直到解释器将通过全班.
那我该怎么做呢?
我想配置apache以允许来自多个域但不是所有域的XMLHttpRequests.
这有效:
Header set Access-Control-Allow-Origin "*"
Run Code Online (Sandbox Code Playgroud)
但它不安全,我想允许我指定的域名,所以经过一些谷歌搜索我得到了这个:
Header set Access-Control-Allow-Origin "http://domain1.com http://domain2.com"
Run Code Online (Sandbox Code Playgroud)
但这只能获得第一个域名,第二个域名不被允许.如何正确指定多个域?
通过 add_to_class() 添加字段时,我的模型继承存在问题。我有一个模型File(models.Model)和Image(File)-这些来自Django的文件管理器。
在我的应用程序中,我正在导入它们并添加字段和方法:
def method_x(self):
print "x"
File.add_to_class("expiration_date", models.DateField(null=True, blank=True))
File.add_to_class("method_x", method_x)
Run Code Online (Sandbox Code Playgroud)
Image 应该继承这两个,但它只获取方法,而不是字段:
>>> some_file = File.objects.get(id=8)
>>> some_image = Image.objects.get(id=8)
>>>
>>> print some_file.expiration_date # this works
... None
>>>
>>> some_image.metgod_x() # this works
>>> x
>>>
>>> print some_image.expiration_date # and this not
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Image' object has no attribute 'expiration_date'
Run Code Online (Sandbox Code Playgroud)
有什么线索吗?
情况如下:
假设我在django中有一个模型A. 当我保存一个对象(A类)时,我需要将它的字段保存到该类的所有其他对象中.我的意思是我需要每个其他A对象都是lat保存的副本.
当我使用信号(例如后保存)时,我得到一个递归(对象试图相互保存,我猜)并且我的python死了.
我希望在前/后保存信号中对同一个类使用.save()方法会导致递归,但只是不知道如何避免它.
我们做什么?
我使用修改过的webapp.RequestHandler处理我的应用程序中的请求:
class MyRequestHandler(webapp.RequestHandler):
"""
Request handler with some facilities like user.
self.out is the dictionary to pass to templates
"""
def __init__(self, *args, **kwargs):
super(MyRequestHandler, self).__init__(*args, **kwargs)
self.out = {
'user': users.get_current_user(),
'logout_url': users.create_logout_url(self.request.uri)
}
def render(self, template_name):
"""
Shortcut to render templates
"""
self.response.out.write(template.render(template_name, self.out))
class DeviceList(MyRequestHandler):
def get(self):
self.out['devices'] = GPSDevice.all().fetch(1000)
self.render('templates/device_list.html')
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:
line 28, in __init__
self.out['logout_url'] = users.create_logout_url(self.request.uri)
AttributeError: 'DeviceList' object has no attribute 'request'
Run Code Online (Sandbox Code Playgroud)
当导致异常的代码移出__init__一切都很好时:
class MyRequestHandler(webapp.RequestHandler):
"""
Request handler with some facilities …Run Code Online (Sandbox Code Playgroud)