我遇到的情况是,当我从服务器获取HTTP 400代码时,服务器告诉我我的请求有什么问题(使用HTTP响应内容中的消息)是完全合法的方式
但是,当状态代码为400时,.NET HttpWebRequest会引发异常.
我该如何处理?对我来说,400是完全合法的,而且非常有帮助.HTTP内容有一些重要的信息,但异常使我离开了我的道路.
[我已经在Django用户发布了这个| Google网上论坛也是.]
使用内联formset文档中的示例,我能够编辑属于特定模型的对象(使用模型形式).我一直在尝试使用相同的模式来 创建使用内联表单集的新对象,但是无法清除我的脑袋以便为此目的带出一个工作视图.
使用与上述链接相同的示例,我将如何创建"作者"模型的新实例及其相关的"书籍"对象?
考虑以下情况: -
假设我的应用程序允许用户在其国家/地区创建州/省.为了清楚起见,我们在这里只考虑ASCII字符.
在美国,用户可以创建名为"Texas"的州.如果这个应用程序在内部使用,让我们说用户不关心拼写为"texas"或"Texas"或"teXas"
但重要的是,如果数据库中已存在"Texas",则系统应阻止创建"texas".
如果模型如下所示:
class State(models.Model):
name = models.CharField(max_length=50, unique=True)
Run Code Online (Sandbox Code Playgroud)
postgres中的唯一性将区分大小写; 也就是说,postgres将允许用户创建"texas"和"Texas",因为它们被认为是唯一的.
在这种情况下可以做些什么来防止这种行为.一个人如何去提供区分insenstitive独特性和Django和Postgres
现在我正在执行以下操作以防止创建不区分大小写的重复项.
class CreateStateForm(forms.ModelForm):
def clean_name(self):
name = self.cleaned_data['name']
try:
State.objects.get(name__iexact=name)
except ObjectDoesNotExist:
return name
raise forms.ValidationError('State already exists.')
class Meta:
model = State
Run Code Online (Sandbox Code Playgroud)
在许多情况下,我将不得不进行此项检查,而且我并不热衷于必须在任何地方编写类似的iexact检查.
只是想知道是否有内置或更好的方式?也许db_type会有帮助吗?也许存在其他一些解决方案
基本上我需要一种优雅的方式来做到以下几点: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2_qs = QuerySet(model=Model2, qs_items=[obj1.model2,obj2.model2])
Run Code Online (Sandbox Code Playgroud)
我可能没有想到,但对我来说做类似下面的事似乎无比愚蠢: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
model2_qs = Model2.objects.filter(pk=obj1.model2.pk)
Run Code Online (Sandbox Code Playgroud)
是的,我需要最终使用Model2的QuerySet供以后使用(特别是传递给Django表单).
在上面的第一个代码块中,即使我使用filter而不是get我,显然会有一个Model1的QuerySet.在我的情况下,反向查找可能并不总是可行的.
Django文档在http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems上说,QueryDict.iteritems()使用相同的最后值逻辑QueryDict.__getitem__(),这意味着如果密钥有多个值,__getitem__()返回最后一个值.
让我们说print request.GET看起来像这样:
<QueryDict: {u'sex': [u'1'], u'status': [u'1', u'2', u'3', u'4']}>
如果我想得到一个像sex=1&status=1&status=2&status=3&status=4(标准的HTTP GET东西)的字符串,由于iteritems上面提到的行为,以下代码将无法提供所需的结果:
mstring = []
for gk, gv in request.GET.iteritems():
mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)
Run Code Online (Sandbox Code Playgroud)
在没有太多循环的情况下获得我想要的结果的最有效方法是什么?
问候.
[编辑]
我应该提一下,我不会诉诸,QueryDict.urlencode()因为该请求中有一些键.我不想在字符串中.我可以改变字符串并取出那些key =值,但只是想知道是否有更好的方法来解决这个问题.我意识到应该明确提到这些信息.
如果我从一个本地的mercurial repo开始,我认为它是"主要"回购(请原谅我的dvcs领主),并打算使用bitbucket作为备份和问题跟踪工具,我可以在我当地进行所有更改回购并执行"hg push"将更改发送回bitbucket.
我不需要在我的本地机器上运行"hg push"命令并使用"hg update"吗?
希望这一切都有道理:)如果有必要,我会通过评论澄清.另外,我正在尝试在这个问题中使用粗体文本,如果我(或你)发现它分散注意力,我会编辑它.随着那个...
使用django.contrib.auth为我们提供了用户和组,以及其他一些我不能没有的有用的东西(比如基本消息).
在我的应用程序中,我有几种不同类型的用户.用户只能是一种类型.这可以很容易地由小组处理,稍微小心点.但是,这些不同的用户在层次结构/关系中彼此相关.
我们来看看这些用户: -
校长 - "顶级"用户
管理员 - 每个管理员向校长报告
协调员 - 每个协调员向管理员报告
除此之外,还有其他用户类型不直接相关,但可能会在以后相关.例如,"公司"是另一种类型的用户,并且可以具有各种"产品",并且产品可以由"协调员"监督."买方"是另一种可能购买产品的用户.
现在所有这些用户都有各种其他属性,其中一些属性对所有类型的用户都是通用的,其中一些属性仅与一种用户类型不同.例如,所有类型的用户都必须拥有一个地址.另一方面,只有Principal用户属于"BranchOffice".
另一点,如上所述,用户只能是一种类型.
该应用程序还需要跟踪谁创建和/或修改了校长,管理员,协调员,公司,产品等.(这是用户模型的另外两个链接.)
在这种情况下,使用Django的多表继承是一个好主意如下: -
from django.contrib.auth.models import User
class Principal(User):
#
#
#
branchoffice = models.ForeignKey(BranchOffice)
landline = models.CharField(blank=True, max_length=20)
mobile = models.CharField(blank=True, max_length=20)
created_by = models.ForeignKey(User, editable=False, blank=True, related_name="principalcreator")
modified_by = models.ForeignKey(User, editable=False, blank=True, related_name="principalmodifier")
#
#
#
Run Code Online (Sandbox Code Playgroud)
或者我应该这样做: -
class Principal(models.Model):
#
#
#
user = models.OneToOneField(User, blank=True)
branchoffice = models.ForeignKey(BranchOffice)
landline = …Run Code Online (Sandbox Code Playgroud) 假设我有两个Django模型Person and Company如下: -
class Company(models.Model):
name = models.CharField()
class Person(models.Model):
last_name = models.CharField(blank=True)
first_name = models.CharField()
company = models.ForeignKey(Company, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
一个人可能属于也可能不属于公司.
我正在使用MySQL.我希望所有不属于任何公司的人员,即公司为空的人员.
如果我这样做,Person.objects.filter(company__isnull=True)我得到一个本质上的SQL: -
SELECT * FROM PersonTable LEFT OUTER JOIN AgencyTable ON (PersonTable.company_id = AgencyTable.id) WHERE AgencyTable.id IS NULL
我如何实现以下SQL: -
SELECT * FROM PersonTable INNER JOIN AgencyTable ON (PersonTable.company_id = AgencyTable.id) WHERE AgencyTable.id IS NULL
从我从阅读Django Users邮件列表中收集的内容来看,这曾经是QuerySet Refactor之前的行为.
编辑 - 现在我看到了我的问题的亵渎!
我想说的是我只是想做
SELECT * FROM PersonTable WHERE PersonTable.company_id IS NULL
请参阅下面的代码.基本上,当用户创建此类的对象时,他们需要指定value_type.如果value_type==2(百分比),则percentage_calculated_on(表单/模板一侧的CheckboxSelectMultiple需要检查一个或多个项目.模型验证不允许我像我正在尝试验证 - 它基本上抛出一个异常,告诉我实例在使用多对多关系之前需要有一个主键值.但是我需要先保存它之前验证对象.我已经在表单(modelform)端尝试了这个验证(使用表格的清洁方法),但同样的事情也发生在那里.
我如何实现此验证?
INHERENT_TYPE_CHOICES = ((1, 'Payable'), (2, 'Deductible'))
VALUE_TYPE_CHOICES = ((1, 'Amount'), (2, 'Percentage'))
class Payable(models.Model):
name = models.CharField()
short_name = models.CharField()
inherent_type = models.PositiveSmallIntegerField(choices=INHERENT_TYPE_CHOICES)
value = models.DecimalField(max_digits=12,decimal_places=2)
value_type = models.PositiveSmallIntegerField(choices=VALUE_TYPE_CHOICES)
percentage_calculated_on = models.ManyToManyField('self', symmetrical=False)
def clean(self):
from django.core.exceptions import ValidationError
if self.value_type == 2 and not self.percentage_calculated_on:
raise ValidationError("If this is a percentage, please specify on what payables/deductibles this percentage should be calculated on.")
Run Code Online (Sandbox Code Playgroud) 如果我理解正确,Workbook的add_sheet方法会创建一个新的工作表(并将其添加到工作簿).我有一个现有的Excel模板(有一个格式化的工作表作为添加信息的基础)我想用xlutils复制并使用新工作表名称多次将其添加到新工作簿.我该如何实现这一目标?我通过代码了解如何将现有工作表添加到现有工作簿,但找不到类似的东西?
from xlrd import open_workbook
from xlutils.copy import copy
from xlwt import Workbook
rb = open_workbook('report3.xlt',formatting_info=True)
wb = copy(rb)
new_book = Workbook()
for distinct_employee in distinct_employees:
w_sheet = wb.get_sheet(0)
w_sheet.write(6,6,distinct_employee.name)
# give the sheet a new name (distinct_employee.id_number)
# add this sheet to new_book
book.save('all_employees.xls')
Run Code Online (Sandbox Code Playgroud) django ×7
.net ×1
bitbucket ×1
dvcs ×1
excel ×1
inheritance ×1
inner-join ×1
left-join ×1
mercurial ×1
modelform ×1
multi-table ×1
postgresql ×1
python ×1
unique ×1
validation ×1
xlrd ×1
xlwt ×1