未获取Django表单中的所有字段以输入详细信息

2024-10-16 20:41:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用我的两个模型-农民(拖拉机外键)和拖拉机-在一个单一的形式,但我没有得到拖拉机的领域在网页上输入其价值,我只是得到农民的领域

我的模特

class Farmer(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    phone =models.CharField(max_length=10)
    address = models.TextField(max_length=200)
    email_address = models.EmailField()

    def full_name(self):
        return f"{self.first_name} {self.last_name}"

    def __str__(self):
        return self.full_name()


class Post(models.Model):
    tractor_price = models.IntegerField(max_length=150)
    implementation = models.CharField(max_length=50)
    purchase_date = models.DateField(auto_now=False)
    slug = models.SlugField(unique=True, db_index=True, null=True,blank=True)
    tractor_company = models.CharField(max_length=50)
    tractor_model = models.CharField(max_length=50)
    description = models.TextField(validators=[MinLengthValidator(10)])
    date = models.DateField(auto_now_add =True)
    farmer = models.ForeignKey(
        Farmer, on_delete=models.SET_NULL, null=True, related_name="posts")

my view.py Only add_post函数

  
def add_post(request):
    if(request.method == "POST"):
        farmer_form = FarmerForm(request.POST)
        post_form = Post(request.POST)
        if(farmer_form.is_valid() and post_form.is_valid()):
            farmer = farmer_form.save()
            post = post_form.save(False) 
            post.farmer = farmer    
            post.save()
            return redirect(reverse("tractor.views.posts"))
    else:
        farmer_form = FarmerForm()
        post_form = Post(request.POST)

    args = {}
    args.update(csrf(request))
    args["farmer_form"] = farmer_form
    args["post_form"] =post_form
    return render(request,"tractor/form.html",args)

forms.html

<div class="form-group">
  <form
    method="POST"
    style="margin-left: 40px; margin-right: 100px"
    enctype="multipart/form-data"
    action="{% url 'tractor:add_post' %}"
    {% csrf_token %} 
    {{post_form}}
    {{farmer_form}}
    >
    <input type="submit" class="btn btn-dark" value="Submit" />
  </form>
</div>

forms.py

class PostForm(ModelForm):
    class Meta:
        model = Post
        fields = ("tractor_price","implementation","purchase_date","tractor_company","tractor_model","description")

class FarmerForm(ModelForm):
    class Meta:
        model = Farmer
        fields = ('first_name','last_name','phone','address','email_address')

我还添加了表单的图像 此外,正如您在屏幕截图中所看到的那样,表单正确对齐,我没有得到表单的字段,只得到了farmer表单的输入

Page I am getting


Tags: nameselfformtruemodelsrequestargspost
1条回答
网友
1楼 · 发布于 2024-10-16 20:41:24

我认为您这样做了:args["tractor_form"]=post_form,但您忘记在html文件中使用{{tractor_form}}

args["tractor_form"]=post_form更改为args["post_form"]=post_form

将html文件中的{{post_form}}更改为{{tractor_form}}

编辑

您不需要这样做:farmer_form = FarmerForm(request.POST)else块中。

farmer_form = FarmerForm(request.POST) # before
farmer_form = FarmerForm() # after.

EDIT2

您不应该将{{post_form}}{{farmer_form}}{% csrf_token %}放在表单标记的<>内:

<div class="form-group">
  <form
    method="POST"
    style="margin-left: 40px; margin-right: 100px"
    enctype="multipart/form-data"
    action="{% url 'tractor:add_post' %}"
    >     <- this is where the form <> is finished.
    {% csrf_token %} 
    {{post_form}}
    {{farmer_form}}
    <input type="submit" class="btn btn-dark" value="Submit" />
  </form>
</div>

相关问题 更多 >