Django ModelForm 永远不会通过 is_valid()

Django ModelForm never passes is_valid()

我是 Django 的新手,我目前正在尝试将从表单输入的数据存储到 model/database。我认为导致问题的原因是我不希望表单上的所有模型字段都可访问。我的模型有如下字段:

    description = models.TextField()
    date_referred = models.DateTimeField(default=timezone.now)
    full_name = models.CharField(max_length=100)
    email = models.EmailField(max_length=100)
    phone_number = models.CharField(max_length=17, blank=True)
    column_number = models.IntegerField()
    notes = models.TextField()
    colour = models.CharField(max_length=6)
    user = models.ForeignKey(User, on_delete=models.CASCADE) 

我使用的ModelForm如下:

class ReferralForm(ModelForm):
    class Meta:
        model = kanban_item
        fields = ["item_name", "description", "full_name", "email", "phone_number"]

views.py 文件中的代码是这样的:

def submit_referrals(request):
    form = ReferralForm()
    if request.method == "POST":
        form = ReferralForm()
        print(request.POST)
        if form.is_valid():
            print("VALID")
            referral = form.save(commit=False)
            referral.user = request.user
            referral.column_number = 0
            referral.colour = "ffffff"
            referral.save()
        else :
            print ("NOT VALID")

如您所见,我正在尝试从表单创建一个模型,然后添加额外的字段,然后将模型保存到数据库中。这不起作用,因为每当我提交表单时,我的代码永远不会通过表单上的 is_valid 方法。

如有任何建议或答案,我将不胜感激,谢谢。

您需要使用数据 (request.POST) 构建 ReferralForm,可能还需要使用文件 (request.FILES)。

没有数据的Form称为“无界”形式,无界形式总是无效的。因此,您创建了一个包含以下数据的表单:

def submit_referrals(request):
    form = ReferralForm()
    if request.method == "POST":
        form = ReferralForm(<strong>request.POST, request.FILES</strong>)  # 🖘 add data and files
        if form.is_valid():
            print("VALID")
            referral = form.save(commit=False)
            referral.user = request.user
            referral.column_number = 0
            referral.colour = "ffffff"
            referral.save()
        else :
            print ("NOT VALID")