在Django中我正在尝试为ContactForm编写ModelForm,当我尝试加载包含表单的页面时,它表示它不存在。然后,当我尝试渲染我之前写过的另一种形式时,它说
Caught AttributeError while rendering: 'CashtextsForm' object has no attribute 'subject'
'Subject'是我尝试在ContactForm中呈现的表单中的字段。那么我必须在models.py中列出一些特定的顺序吗?这是代码:
# Create your models here.
from django.db import models
from django.forms import ModelForm
class Cashtexts(models.Model):
cashTexts = models.CharField(max_length=100, blank=True) #change me to a website filter
superPoints = models.CharField(max_length=100, blank=True)#chance to "superPoints _Username"
varolo = models.CharField(max_length=100, blank=True)
swagbucks = models.CharField(max_length=100, blank=True)
neobux = models.CharField(max_length=100, blank=True)
topline = models.CharField(max_length=100, blank=True)
Paidviewpoint = models.CharField(max_length=100, blank=True)
cashcrate = models.CharField(max_length=100, blank=True)
def __unicode__(self):
return self.cashcode
class Contact(models.Model):
sender = models.EmailField()
subject = models.CharField(max_length=25)
message = models.TextField()
class CashtextsForm(ModelForm):
class Meta:
model = Cashtexts
def __unicode__(self):
return self.subject
class ContactForm(ModelForm):
class Meta:
model = Contact
我之前将它们安排为Model-Modelform,Model-Modelform但是here它将它们显示为我现在拥有它们的方式。
编写表单还有什么好处吗?现在我更喜欢在表单上编写模型表单(我不认为它们有很多不同)但如果我只编写模型表单,我会错过功能吗?那么有什么我错过了如何在models.py中编写多个表单或者我是否将它们写成了文件?或者我不能通过命令syncdb创建它们吗?
答案 0 :(得分:0)
是的,您的表单确实没有subject
,只需删除__unicode__
定义,一切都会好的。
这是因为django代码的声明式风格。如果要检查对象,请使用pdb
模块和dir
内置。
您几乎每次都会使用ModelForm子类,但有时您需要一个无法从模型构建的表单。在这种情况下,django将帮助您描述此类表单并使用表单清理和字段验证。
答案 1 :(得分:0)
__unicode__(self)
方法应该是Contact
类
class Contact(models.Model):
sender = models.EmailField()
subject = models.CharField(max_length=25)
message = models.TextField()
def __unicode__(self):
return self.subject
在CashtextsForm
内部没有意义,因为它不“知道”subject
属性。
答案 2 :(得分:0)
主题字段是在模型中定义的,而不是在模型中定义的,因为可以在没有模型实例的情况下初始化模型形式,这样做是不安全的:
def __unicode__(self):
return self.instance.subject
你可以做什么(但我真的没有看到这样做的意义):
def __unicode__(self):
if getattr(self, 'instance') is not None:
return self.instance.subject
return super(CashtextsForm, self).__unicode__()