我有一个模特:
from django.db import models
CHOICES = (
('s', 'Glorious spam'),
('e', 'Fabulous eggs'),
)
class MealOrder(models.Model):
meal = models.CharField(max_length=8, choices=CHOICES)
Run Code Online (Sandbox Code Playgroud)
我有一个表格:
from django.forms import ModelForm
class MealOrderForm(ModelForm):
class Meta:
model = MealOrder
Run Code Online (Sandbox Code Playgroud)
我想使用formtools.preview.默认模板打印选择的短版本('e'而不是'Fabulous eggs'),因为它使用
{% for field in form %}
<tr>
<th>{{ field.label }}:</th>
<td>{{ field.data }}</td>
</tr>
{% endfor %}.
Run Code Online (Sandbox Code Playgroud)
我想要一个像上面提到的一般模板,但是打印'Fabulous eggs'代替.
[因为我怀疑真正的问题在哪里,我为所有人加粗了:)]
我知道如何以一种本身丑陋的方式获得一个选择的冗长版本:
{{ form.meal.field.choices.1.1 }}
Run Code Online (Sandbox Code Playgroud)
真正的痛苦是我需要得到所选择的选择,而我想到的唯一方法是迭代选择和检查{% ifequals currentChoice.0 choiceField.data %},这甚至更加丑陋.
可以轻松完成吗?或者它需要一些模板标签编程?难道这不应该在django中可用吗?
我想要一个试图覆盖现有密钥值的Map.我试过了:
trait Unoverwriteable[A, B] extends scala.collection.Map[A, B] {
case class KeyAlreadyExistsException(e: String) extends Exception(e)
abstract override def + [B1 >: B] (kv: (A, B1)): Unoverwriteable[A, B1] = {
if (this contains(kv _1)) throw new KeyAlreadyExistsException(
"key already exists in WritableOnce map: %s".format((kv _1) toString)
)
super.+(kv)
}
abstract override def get(key: A): Option[B] = super.get(key)
abstract override def iterator: Iterator[(A, B)] = super.iterator
abstract override def -(key: A): Unoverwriteable[A, B] = super.-(key)
}
Run Code Online (Sandbox Code Playgroud)
得到了:
<console>:11: error: type mismatch;
found : …Run Code Online (Sandbox Code Playgroud) 是否有一种pythonic方式的阅读 - 比如说 - 混合整数和字符输入而不是一次读取整个输入而不用担心换行?例如,我有一个文件,其中包含空格分隔的数据,我只知道有x个整数,然后是y个字符,然后是更多的整数.我不想假设有关换行的任何内容.
我的意思是像C++中的以下内容一样无意识:
...
int i, buf;
char cbuf;
vector<int> X, Z;
vector<int> Y;
for (i = 0; i < x; i++) {
cin >> buf;
X.push_back(buf);
}
for (i = 0; i < y; i++) {
cin >> cbuf;
Y.push_back(cbuf);
}
for (i = 0; i < z; i++) {
cin >> buf;
Z.push_back(buf);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我忘了说我希望它在控制台的实时输入下表现良好 - 即在获取令牌之前不需要按ctrl + d并且该功能应该能够尽快返回它们行已输入.:)