我注意到当我在python2中创建类时,它将属性存储在dict_proxy对象中:
>>> class A(object):
... pass
>>> A.__dict__
dict_proxy({....})
Run Code Online (Sandbox Code Playgroud)
但是在python3中__dict__返回mappingproxy:
>>> class A(object):
... pass
>>> A.__dict__
mappingproxy({....})
Run Code Online (Sandbox Code Playgroud)
两个人之间有什么区别吗?
我的模型定义为:
class MembershipHistory(models.Model):
mem_name = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='mem_number')
project_number = models.IntegerField()
project_name = models.CharField(max_length=200)
evaluator_remark = models.TextField(null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
这是我制作的另一个模型 ForeignKey
class Member(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
membership_number = models.CharField(max_length=10)
Run Code Online (Sandbox Code Playgroud)
我将我的表格定义为
class MembershipHistoryForm(forms.Form):
def __init__(self,*args, **kwargs):
self.user = kwargs.pop('user')
super(MembershipHistoryForm, self).__init__(*args, **kwargs)
self.fields['mem_name'].queryset = Member.objects.get(user=self.user)
#mem_name = forms.ModelChoiceField(empty_label="NAME")
class Meta:
model = MembershipHistory
fields = '__all__'
widgets = {
'project_number':forms.TextInput(attrs={'placeholder':'Project Number'}),
'project_name':forms.TextInput(attrs={'placeholder':'Project Name'}),
'evaluator_remark':forms.Textarea(attrs={'placeholder':'Evaluator Remark'}),
}
Run Code Online (Sandbox Code Playgroud)
现在,每当我实例化表单时,我都不会收到以下错误
Django Version: 1.10.4
Exception Type: AttributeError
Exception Value: 'Member' object has …Run Code Online (Sandbox Code Playgroud) 我想使用查询助手 api定义自定义查询助手 。这里的例子:
// models/article.ts
import { Document, Schema, Model, model } from 'mongoose';
interface IArticle extends Document {
name: string;
}
interface IArticleModel extends Model<IArticle> {
someStaticMethod(): Promise<any>;
}
const ArticleSchema = new Schema( { name: String } )
ArticleSchema.query.byName = function(name) {
return this.find({ name })
}
export default model<IArticle, IArticleModel>('Article', ArticleSchema);
// routes/article.ts
import ArticleModel from '../models/article.ts'
router.get('/articles, (req, res) => {
ArticleModel.find().byName('example')
})
Run Code Online (Sandbox Code Playgroud)
byName当我将方法与默认值链接时,Typescript 会抱怨方法。
我可以把它放在IArticleModel接口中,但在那种情况下我只能从模型中调用它。
我应该把这个方法的定义放在哪里才能以可链接的方式使用它?
项目结构:
??? db.sqlite3
??? manage.py
??? static
? ??? admin
? ??? css
? ??? img
? ??? js
??? abc1
? ??? admin.py
? ??? __init__.py
? ??? migrations
? ? ??? __init__.py
? ??? models.py
? ??? templates
? ? ??? abc1
? ? ??? homepage.html
? ? ??? css
? ? ??? img
? ? ??? js
? ??? tests.py
? ??? urls.py
? ??? views.py
??? abc2
??? functions.py
??? __init__.py
??? settings.py
??? urls.py
??? …Run Code Online (Sandbox Code Playgroud) 我有两个模型如下:
class A(models.Model):
a = models.BooleanField(default=False)
q = models.BooleanField(default=False)
class B(models.Model):
c = models.Foreignkey('A', related_name='bb')
d = models.BooleanField(default=False)
e = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
class Myview(ListView):
model = A
template_name = 'admin/layer.html'
def get_context_data(self, *args, **kwargs):
context = super(ListView, self).get_context_data(*args, **kwargs)
context['mylist'] = A.objects.filter(bb__e=False)
return context
Run Code Online (Sandbox Code Playgroud)
一切都工作正常,除了在我的模板'admin/layer.html'我尝试这个:
{% for list in mylist %}
{{ list.bb.d }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
但我没有得到任何价值{{ list.bb.d }}我可以在django模板中以这种方式使用相关的字段名称吗?
django ×3
python ×2
django-admin ×1
django-forms ×1
javascript ×1
mongodb ×1
mongoose ×1
python-2.x ×1
python-3.x ×1
typescript ×1