我想在模型中保存选定的选项。 我想使用Select小部件进行选择。 我有一个模特:
qobj = Model1.objects.all()
选择=( (x.id,x.name)for q in qobj )
class Model2(models.Model): choice_field = models.CharField(" CHOICE",max_length = 77,choices = CHOICE)
我得到错误:"选择一个有效的选择。 5不是可用的选择之一。" - 尝试保存时出错。 我是尝试forms.ModelChoiceField(queryset = qobj) - 没问题,但我不能得到Model.get_choice_field_display()。 可能有人知道解决这个问题吗?
答案 0 :(得分:2)
错误在这里:
/**
* Writes midi data to the Sonivox synthesizer.
* The length of the array should be the exact length
* of the message or messages. Returns true on success,
* false on failure.
*/
boolean write(byte buffer[])
MyModel.objects.order_by('date')返回一个QuerySet,如果queryset为空,则它没有索引'[0]'。尝试'first()'而不是[0]:
date = MyModel.objects.order_by('date')[0]
name = MyModel.objects.order_by('name')[0]
Case MyModel为空,首先返回None 文档: https://docs.djangoproject.com/en/1.9/ref/models/querysets/#first
答案 1 :(得分:1)
问题是由此引起的:
def preview(request):
form = MyModelForm()
date = MyModel.objects.order_by('date')[0]
name = MyModel.objects.order_by('name')[0]
您正在查询对象,排序并获取第一个项目。但是,如果没有项目,则无法执行此操作。而是使用.first()
,例如
date = MyModel.objects.order_by('date').first()
name = MyModel.objects.order_by('name').first()
这将返回第一个项目(如果有),或None
如果没有。有关详细信息,请参阅the documentation。还有一些other examples in this question用于处理此问题的替代方法。
但是,我建议您不要使用此方法。保存新对象(form01.save()
)时,将返回新创建的对象。然后,您可以直接访问它以进行预览。例如:
preview_model = form01.save()
使用MyModel.objects.order_by('date').first()
获取最新记录'当另一个用户在.save()
和选择之间编辑另一个对象时,会打开您的竞争条件。
我不确定name = MyModel.objects.order_by('name').first()
的目的是什么,因为这会将一个完全不同的对象返回到前一位(第一个对象按字母顺序排序) - 而我无法想象为什么你会这么想。在views.py
中尝试以下内容:
def form1(request):
form = MyModelForm()
if request.method == 'POST':
form01 = MyModelForm(request.POST, request.FILES)
if form01.is_valid():
preview = form01.save()
date = preview.date
return render(request, 'WebMamOffice/en/preview.html', {'form': form01, 'date': date, 'name': name})
return render(request, 'WebMamOffice/en/form1.html', {'form': form})
答案 2 :(得分:0)
您的preview()
视图假定至少有一个MyModel
实例存在:您正在访问MyModel.objects.blah[0]
,只有在[0]
处有内容时才会有效。< / p>
答案 3 :(得分:0)
这个问题在django中部分解决了无法保存模型选择的选择值
答案 4 :(得分:0)
使用ManyToManyField的最佳方式:
class Model2(models.Model):
choice_field = models.ManyToManyField(to=Model1)