Django-通过表单保存模型不起作用

Django-通过表单保存模型不起作用,django,forms,model,save,Django,Forms,Model,Save,Django中的.save()方法有点问题。一种形式有效,另一种形式无效。我找不到问题所在 views.py @login_required def stock_add(request, portfolio_id): if request.method == 'POST': print('request.method is ok') form = StockForm(request.POST) print('form is ok')

Django中的.save()方法有点问题。一种形式有效,另一种形式无效。我找不到问题所在

views.py

@login_required
def stock_add(request, portfolio_id):
    if request.method == 'POST':
        print('request.method is ok')
        form = StockForm(request.POST)
        print('form is ok')

        if form.is_valid():
            print('form is valid')
            stock = form.save(commit=False)
            stock.created_by = request.user
            stock.portfolio_id = portfolio_id
            stock.save()
            return redirect('portfolio-overview')
        else:
            print("nope")
    else:
        print('else form statement')
        form = StockForm()

    context = {
        'form':form
    }
    return render(request, 'portfolios/stock-add.html', context) 
forms.py

class StockForm(ModelForm):
    class Meta:
        model = Stock
        fields = ['quote', 'amount']
html

如果查看views.py文件,当我提交表单时,它甚至不会打印('request.method is ok') 我可以通过管理页面添加股票

所以我再也找不到线索了


干杯

当你发布表单并需要一个特殊的url(比如带有属性的“你的”)时,我喜欢设置
操作=“{%url myview.views.stock\u add portfolio\u id%}”

action=“”
将保存到同一页面,而不考虑额外的参数(如果需要)


只要在
上下文中传递
portfolio_id
,这就行了我找到了答案,InteregerField(来自models.py)需要一个默认值。 默认值=无(或其他值)


干杯

嗨,马克西姆,谢谢你的回答。我尝试添加“公文包id”:公文包id到上下文中。但这不起作用。我还尝试了action={%url'stock\u add'portfolio\u id%},但效果不太好。。。。。还有其他建议吗?还是我做错了什么?
{% extends 'core/base.html' %}

{% block content %}
<div class="container">
    <h1 class="title">Add Stock</h1>

    <form method="POST" action=".">
        {% csrf_token %}

        {{ form.as_p }}
        <button type="submit" class="button is-primary">Submit</button>
    </form>
</div>
{% endblock %}
from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Portfolio(models.Model):
    title = models.CharField(max_length=56)
    description = models.TextField(blank=True, null=True, max_length=112)

    created_by = models.ForeignKey(User, related_name='portfolios', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'Portfolio'

    def __str__(self):
        return self.title



class Stock(models.Model):
    Portfolio = models.ForeignKey(Portfolio, related_name='stocks', on_delete=models.CASCADE)
    quote = models.CharField(max_length=10)
    amount = models.IntegerField()

    created_by = models.ForeignKey(User, related_name='stocks', on_delete=models.CASCADE)
    created_at = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.quote