我正在尝试使用基于类的通用视图UpdateView更新Django中的模型.
我阅读了使用基于类的UpdateView在Django中更新用户模型的页面,试着让我开始,但是我收到一个错误'WSGIRequest'对象没有属性'id'
我是Django的新面孔,所以如果我做一些愚蠢的事情,请原谅.
//urls.py
url(r'^portfolios/update/(?P<id>\d+)/$',PortfoliosUpdateView.as_view()),
Run Code Online (Sandbox Code Playgroud)
//views.py
class PortfoliosUpdateView(UpdateView):
form_class = PortfoliosCreateForm
model = Portfolios
template_name = 'portfolios/create.html'
def get(self, request, **kwargs):
self.object = Portfolios.objects.get(id=self.request.id)
form_class = self.get_form_class()
form = self.get_form(form_class)
context = self.get_context_data(object=self.object, form=form)
return self.render_to_response(context)
def get_object(self, queryset=None):
obj = Portfolios.objects.get(id=self.request.id)
return obj
Run Code Online (Sandbox Code Playgroud)
它主要只是最初发布的代码的修改版本,但我认为它有用.我知道我正在尝试检索作为GET参数传递的id,但在请求变量中似乎没有.我是以错误的方式来做这件事的吗?
谢谢
编辑:我想我修好了,但这可能是错的:我换了线
self.object = Portfolios.objects.get(id=self.request.id)
obj = Portfolios.objects.get(id=self.request.id)
Run Code Online (Sandbox Code Playgroud)
至
self.object = Portfolios.objects.get(id=self.kwargs['id'])
obj = Portfolios.objects.get(id=self.kwargs['id'])
Run Code Online (Sandbox Code Playgroud)
我错了.
我在这里看了几篇看似相似的文章,但没有完全回答我的问题.我已经给出了一个分配的问题,即为二叉树中的每个节点分配各自的深度.我只是不太明白.
作为参考,这是我的代码:
struct treeNode {
int item;
int depth;
treeNode *left;
treeNode *right;
};
typedef treeNode *Tree;
int assignDepth(Tree &T, int depth)
{
if(T!=NULL)
{
depth = assignDepth(T->left, depth++);
T->depth = depth;
depth = assignDepth(T->right, depth++);
}
else //leaf
return depth--;
}
Run Code Online (Sandbox Code Playgroud)
我试着用笔和纸来完成它看起来很好,但我的桌面检查技巧显然缺乏.
有人能指出我正确的方向吗?这是我第一次使用树木,递归不是我的强项.
回答:
void treecoords(Tree &T, int depth)
{
static int count = -1; //set to -1 so the precrement before assignment doesn't give the wrong values
if(T!=NULL)
{
treecoords(T->left, depth+1); //depth decrements automatically …Run Code Online (Sandbox Code Playgroud) 我遇到的问题是我正在尝试创建一个表单,通过将其嵌入ModelForm中的隐藏字段中来传递当前登录的用户ID.
我的模特:
class Portfolios(models.Model):
id = models.AutoField(primary_key=True)
port_name = models.CharField(max_length=135, blank=True)
port_type = models.ForeignKey(PortType, null=True, db_column='port_type', blank=True)
user = models.ForeignKey(User)
def __unicode__(self):
return self.port_name;
class Meta:
db_table = u'tbl_portfolios'
Run Code Online (Sandbox Code Playgroud)
我的表格:
class PortfoliosCreateForm(ModelForm):
class Meta:
model = Portfolios;
Run Code Online (Sandbox Code Playgroud)
我的模板:
<form action="" method="post">
{% csrf_token %}
{% for field in form %}
<div class="create_form_field">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<input type="submit" value="Create" /></p>
</form>
Run Code Online (Sandbox Code Playgroud)
我使用通用的创建视图调用模板:
url(
r'^portfolios/create/$',
'django.views.generic.create_update.create_object',
dict(
form_class=PortfoliosCreateForm,
post_save_redirect='/',
template_name='portfolios/create.html'
)
Run Code Online (Sandbox Code Playgroud)
) …
我已经阅读了关于这个问题的一些SO文章,但它们似乎都没有起作用.我正在为我的一个表创建种子数据,每当我运行rake db:seed时它会给我错误:
Can't mass-assign protected attributes: severity
Run Code Online (Sandbox Code Playgroud)
我的两个模特看起来像
class Status < ActiveRecord::Base
belongs_to :severity
attr_accessible :description, :image, :name, :slug, :severity_id
end
Run Code Online (Sandbox Code Playgroud)
和
class Severity < ActiveRecord::Base
attr_accessible :name, :val, :severity_id
end
Run Code Online (Sandbox Code Playgroud)
我试图种下的数据是
statuses = Status.create(
[
{
"name"=> 'Normal',
"slug"=> 'normal',
"description"=> 'The service is up or was up during this entire period',
"severity"=> 1,
"image"=> 'tick-circle'
}
]
)
Run Code Online (Sandbox Code Playgroud)
我很难理解为什么会这样.有什么建议吗?
提前致谢