我想准备一个新对象但是等待用户输入来创建它:
我已将get_form
添加到此视图中:
class MyCreateView(CreateView):
def get_form(self, form_class):
form = super(MyCreateManView, self).get_form(form_class)
if self.kwargs['ref']:
new_item = get_object_or_404(models.MyModel, pk = self.kwargs['ref'])
new_item.pk = None
new_item.note = "Copia di " + new_item.note
form = MyForm(instance = new_item)
def form_valid(self, form):
...
在该方法中,我读取了GET参数'ref'并使用该数据预编译了表单字段。
但是当我提交数据时,不会执行form_valid
方法,也不会创建新对象。
答案 0 :(得分:2)
当你这样做时,
get_form_kwargs
您没有将表单绑定到任何数据。这意味着表单永远不会有效。
我会尝试覆盖def get_form_kwargs(self):
kwargs = super(MyCreateView, self).get_form_kwargs()
if self.kwargs['ref']:
new_item = get_object_or_404(models.MyModel, pk = self.kwargs['ref'])
...
kwargs['instance'] = new_item
return kwargs
。
import java.util.Scanner;
public class Vecteur {
public int n;
static int i;
static int j, k;
int t[];
static Scanner sc = new Scanner(System.in);
Vecteur(int n) {
this.n = n;
t = new int[n];
}
Vecteur() {
this.n = 0;
t = null;
}
public void remplir() {
this.t = new int[100]
/*System.out.println("donner le nombre d'element a lire");
n=sc.nextInt();*/
for (i = 0; i < n; i++) {
System.out.println("donner le " + i + "° element a lire");
t[i] = sc.nextInt();
}
}
public void contenu(Vecteur Tab) {
i = 0;
j = 0;
if (n <= Tab.n) {
while (j < Tab.n)
{
if (t[i] != Tab.t[j]) {
j++;
i = 0;
} else {
i++;
j++;
}
}
if (i > n) {
System.out.println("Le tableau 1 est contenu dans tableau 2");
} else {
System.out.println("Le tableau 1 n'est pas contenu dans tableau 2");
}
} else {
while (i < n)
{
if (t[i] != Tab.t[j]) {
i++;
j = 0;
} else {
i++;
j++;
}
}
if (j > n) {
System.out.println("Le tableau 2 est contenu dans tableau 1");
} else {
System.out.println("Le tableau 2 n'est pas contenu dans tableau 1");
}
}
}
boolean appartient(int x) {
i = 0;
boolean trouve = false;
while ((i < n) && (t[i] != x)) {
i++;
}
if (i >= n)
System.out.println("le x n'appartient pas a votre Tableau");
else {
System.out.println("le x appartient a votre tableau");
trouve = true;
}
return trouve;
}
public void affiche() {
for (i = 0; i < n; i++) {
System.out.println(t[i]);
}
}
public void trier() {
int j, tmp;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (t[i] > t[j]) {
tmp = t[i];
t[i] = t[j];
t[j] = tmp;
}
}
}
for (int i = 0; i < n; i++) {
System.out.println("Les élements de tableau aprés le trie sont " + t[i]);
}
}
void insere(int x) {
if (appartient(x) == true) {
System.out.println("L'insersion est impossible, La valeur existe deja!");
} else {
for (i = n;
(i > 0) && (t[i - 1] > x); i--)
t[i] = t[i - 1];
/* VAL est copié à la position du dernier */
/* élément déplacé. */
t[i] = x;
n++;
for (i = 0; i < n; i++)
System.out.println(t[i]);
}
}
static void fusionner(Vecteur tab1, Vecteur tab2) {
Vecteur FUS = new Vecteur(tab1.n + tab2.n);
i = 0;
j = 0;
k = 0;
while ((i < tab1.n) && (j < tab2.n))
if (tab1.t[i] < tab2.t[j]) {
FUS.t[k] = tab1.t[i];
k++;
i++;
} else {
FUS.t[k] = tab2.t[j];
k++;
j++;
}
while (i < tab1.n) {
FUS.t[k] = tab1.t[i];
k++;
i++;
}
while (j < tab2.n) {
FUS.t[k] = tab2.t[j];
k++;
j++;
}
/* Edition du résultat */
System.out.println("Le tableau aprés le fusion est ");
for (k = 0; k < tab1.n + tab2.n; k++)
System.out.println(FUS.t[k]);
}
public static void main(String args[]) {
System.out.println("donner le nombre d'element de la table 1");
Vecteur tab1 = new Vecteur(100);
tab1.n = sc.nextInt();
tab1.remplir();
tab1.affiche();
tab1.trier();
System.out.println("donner le nombre d'element de la table 2");
Vecteur tab2 = new Vecteur(100);
tab2.n = sc.nextInt();
tab2.remplir();
tab2.affiche();
tab2.trier();
fusionner(tab1, tab2);
tab1.contenu(tab2);
tab2.appartient(5);
tab1.insere(6);
}
}
答案 1 :(得分:1)
标记的答案是错误的,因为我已经对其进行了测试,它将覆盖您现有的对象!
改为在下面使用(在Django 2.17上测试)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
old_item = get_object_or_404(Tutorial, pk=self.kwargs['pk'])
new_item = deepcopy(old_item)
new_item.id = None
kwargs['instance'] = deepcopy(new_item)
return kwargs