我有这样的表格:
database
所以我可以添加一个新选项或编辑一个已存在的两个视图
forms.py
class OptionForm(forms.Form):
name = forms.CharField(widget=forms.TextInput(attrs={'class' : 'form-control'}), max_length=100, label='Option Name')
default = forms.BooleanField(label='Default', required=False)
但我需要当用户选择一个选项作为默认选项时,无论是新选还是已存在,所有其他选项默认设置为views.py
def new_opt(request):
if request.method=='POST':
fnewopt = OptionForm(request.POST)
if fnewopt.is_valid():
model = OptionModel()
model.name = fnewopt.cleaned_data.get('name')
model.default = fnewopt.cleaned_data.get('default')
model.save()
def edit_opt(request, id_opt):
opt = OptionModel.objects.get(id=id_opt)
if request.method == 'POST':
feditopt = OptionForm(request.POST)
if feditopt.is_valid():
model = opt
model.name = feditopt.cleaned_data.get('name')
model.default = feditopt.cleaned_data.get('default')
modelo.save()
答案 0 :(得分:1)
如果您的新选项有public static byte[] ReadBytes(string filename, uint address, int length)
{
var buff = new byte[length];
Stream fs = File.OpenRead(filename);
BinaryReader b = new BinaryReader(fs);
b.BaseStream.Seek(address, SeekOrigin.Begin);
b.Read(buff, 0, length);//This is where it breaks.
return buff;
}
,请将所有现有选项设置为default=True
,然后设置新选项default=false
。当他们得救时,我不确定你的选择在哪里。您可能有更好的时间找出哪个选项是真的,只是设置为false。
答案 1 :(得分:1)
您可以通过自定义模型的save()
方法来实现这一目标:
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.default:
# At this point self.pk will exist whether
# this was a new or updated instance.
# Using update() allows this to run in a single query
# (plus the query for super().save(), of course).
OptionModel.objects.exclude(pk=self.pk).update(default=False)
其他几点说明:
您应该将save()
方法包装在原子事务中。
每次保存选项时,这将执行额外的update()
,而不仅仅是第一次。为避免这种情况,您必须检测值更改到True
的时间。有第三方软件包允许你这样做,但它可能不值得打扰。
此问题和答案并未解决验证问题 - 如果另一个OptionModel
已有default=True
该怎么办?