我尝试以readonly的形式设置我的字段并输入任何默认值。 这是我表格的一部分:
category = forms.CharField(widget=forms.TextInput(attrs={'readonly':
'readonly'}),
initial=Category.objects.get(name='Zdrowie i uroda'))
class Meta:
model = Site
fields = ('url', 'name', 'description', 'keywords', 'group', 'category',
'subcategory', 'category1', 'subcategory1')
我收到错误:无法指定"' Zdrowie i uroda'":" Site.category"必须是"类别"实例
这是我的网站型号:
class Site(models.Model):
category = models.ForeignKey('Category')
subcategory = ChainedForeignKey(
'SubCategory',
chained_field='category',
chained_model_field='category',
show_all=False,
auto_choose=True)
name = models.CharField(max_length=70)
description = models.TextField()
# importuje zmienione TextFields widgets.py
keywords = MyTextField()
date = models.DateTimeField(default=datetime.now, editable=False)
url = models.URLField()
is_active = models.BooleanField(default=False)
category1 = models.ForeignKey('Category', related_name='category', blank=True, null=True, default=None)
subcategory1 = ChainedForeignKey(
'SubCategory',
chained_field='category1',
chained_model_field='category',
related_name='subcategory',
show_all=False,
auto_choose=True, blank=True, null=True, default=None)
group = models.CharField(max_length=10, choices=(('podstawowy', 'podstawowy'),
('premium', 'premium')), default='podstawowy')
def get_absolute_url(self):
return reverse('site', args=[str(self.category.slug),
str(self.subcategory.slug), str(self.id)])
def get_thumb(self):
host = urlparse(self.url).hostname
if host.startswith('www.'):
host = host[4:]
thumb = 'http://free4.pagepeeker.com/v2/thumbs.php?size=s&url=' + host
return thumb
class Meta:
verbose_name_plural = "Strony"
def __str__(self):
return self.name
我无法处理它。有线索吗?
最后,我从我的model.form中排除了category,subcategory字段,并将其手动添加到html源代码中:
{{ form_extended|bootstrap }}
<label for="example-text-input" class="col-2 col-form-label">Category</label>
<input class="form-control form-control-lg" type="text" name="category" disabled required value="{{ form_extended.initial.category.name }} " />
<label for="example-text-input" class="col-2 col-form-label">Subcategory</label>
<input class="form-control form-control-lg" type="text" name="subcategory" disabled required value="{{ form_extended.initial.subcategory.name }} " />
我不认为这是正确的方法,但我无法将一些数据用于形成初始值。我应该从头开始手动创建表单吗?我的方式并不好,因为我使用jQuery来扩展表单。现在类别,子类别字段是las,但它们不应该(当用户选择&#34; premium&#34;来自选择字段的组时,在子类别字段之后应该出现&#34; category1&#34;,&#34; subcategory1&#34; fields ...
一如既往 - 我为可怕的英语感到抱歉。每个帖子都像我的考试一样。
答案 0 :(得分:1)
选项无需进一步深入研究Django表单:
这可能不是一个选项,但您可以尝试设置:
--user
从表单中删除类别表单字段的显式声明,只需在初始化表单时设置初始类别,或覆盖class Site(models.Model):
category = models.ForeignKey('Category', editable=False)
进行设置。
Django通常会将ForeignKeyField呈现为下拉列表。你明确想要一个文本输入吗?在这种情况下,您必须自己处理数据验证和数据映射。
解决这个问题的方法是删除表单字段的显式声明,并在HTML模板中单独处理该字段:
__init__
“你明确想要输入文字吗?” - 不。
在这种情况下,您需要here而不是<input type="text" name="category" value="{{ form.initial.category.name }}" />
。
CharField