2016-04-15 8 views
0

私はdjangoを初めて使う人です。Djangoは外部キーをフォームに渡します

リクエストからIDを取得する必要があります。フォームが作成されたら、この値からcomplaintidフィールドの値を作成し、フォーム自体から残ります。あなたは既にcommit=Falseで保存されている

models.py

class Complaint(models.Model): 
    complaintid= models.AutoField(primary_key=True) 
    dateofcomplaint=models.DateTimeField(auto_now=False, auto_now_add=True) 
    content = models.TextField() 
    policestation= models.CharField(max_length=120) 
    location=models.TextField() 

    def __unicode__(self): 
     return unicode(self.complaintid) 
    def __str__(self): 
     return self.complaintid 
    def get_absolute_url(self): 
     return reverse("crimefiles:detail", kwargs={"id":self.complaintid}) 

class Fir(models.Model): 
    firid=models.CharField(max_length=10,primary_key=True) 
    complaintid=models.ForeignKey(Complaint,default=None) 
    signedby= models.CharField(max_length=20) 
    content=models.TextField(default="First Information Report") 

    def __unicode__(self): 
     return self.firid 

    def __str__(self): 
     return self.firid 

views.py

def fir_create(request,id=None): 
    form =FirForm(request.POST or None) 
    if form.is_valid(): 
     instance=form.save(commit=False) 
     instance.save() 
     messages.success(request,"sucessfully Created") 
     return HttpResponseRedirect() 
    context={ 
    "form":form 
    } 
    return render(request,"fir_form.html",context) 

forms.py

class FirForm(forms.ModelForm): 
    class Meta: 
     model=Fir 
     fields=[ 
     "firid", 
     "signedby", 
     "content"] 
+0

あなたの質問は何ですか? – Selcuk

+0

URLから苦情IDを追加してフォームに設定し、残りの値をフォームのフォームに入れたいと思います。fir_create関数のim formを渡します。私は苦情IDとして保存したい –

答えて

1

は、あなただけの前に苦情のフィールドを設定する必要がありますinstance.save()を呼び出してください。

get_object_or_404を使用すると、idが有効なクレームIDであることを確認できます。

from django.shortcuts import get_object_or_404 

def fir_create(request,id=None): 
    if id is not None: 
     complaint = get_object_or_404(Complaint, id=id) 
    else: 
     complaint = None 
    form =FirForm(request.POST or None) 
    if form.is_valid(): 
     instance=form.save(commit=False) 
     instance.complaint = complaint 
     instance.save() 
     ... 

さらに検証を追加する必要があることに注意してください。 - ユーザーがURL内のIDを変更するだけで苦情を変更できる瞬間です。

+0

助けてくれてありがとうございます。 –

関連する問題