【问题标题】:Django passing foreign key to formDjango将外键传递给表单
【发布时间】:2016-08-07 04:16:11
【问题描述】:

我是 django 新手。

我需要从请求中获取 id,并且在创建表单时,我希望它从该值中获取抱怨字段的值,并从表单本身中获取。

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"]

【问题讨论】:

  • 我想从 url 添加投诉 id 并将其设置为表单,并在 fir_create 函数中以 fir 表单形式获取其余值我传递 id .. 我想用它保存为投诉ID

标签: django django-models django-forms


【解决方案1】:

您已经在使用commit=False 进行保存,您只需在调用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 来更改投诉。

【讨论】:

  • 好的,谢谢,我终于弄明白了。
  • @OlowuAbayomi 很高兴你知道了
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 2013-11-20
  • 2021-02-12
  • 2021-03-04
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
相关资源
最近更新 更多