Django的获得ForeignKey的对象的领域模型中
问题描述:
我有一个定义的这两款车型一对多的关系Django的获得ForeignKey的对象的领域模型中
从django.core.validators汇入django.db进口车型
class Template(models.Model):
name = models.CharField(max_length=100)
fields = models.IntegerField()
def __str__(self):
return self.name
class Page(models.Model):
template = models.ForeignKey(Template, related_name='pages')
title = models.CharField(max_length=100)
text = []
for i in range(template.fields): #Error occuring here
text[i] = models.TextField()
def __str__(self):
return self.title
我RegexValidator 想要得到template.fields的值,但我得到这个错误
for i in range(template.fields):
AttributeError: 'ForeignKey' object has no attribute 'fields'
我使用ForeignKey对象是否错误?任何帮助将不胜感激
答
您无法获取数据迭代模板字段。如果修改它,请使用__init__
函数。
class Template(models.Model):
name = models.CharField(max_length=100)
fields = models.IntegerField()
def __str__(self):
return self.name
class Page(models.Model):
template = models.ForeignKey(Template, related_name='pages')
title = models.CharField(max_length=100)
text = []
def __init__(self, request, *args,**kwargs):
super (Page,self).__init__(*args,**kwargs)
self.fields['template'].queryset = Template.objects.all()
def __str__(self):
return self.title
这根本没有任何意义。你为什么要这样做? –
因此,页面将具有不同数量的文本字段,这取决于其父级模板中定义的内容。 Daniel Roseman – dwmyfriend
您正在访问类体中的'template',所以它只是一个类而不是实际的数据。一旦你有该模型的*实例*,你可以访问被认为是'template'的字段。 – Grimmy