【问题标题】:Django One-to-One field is not saving (violates not-null constraint)Django 一对一字段未保存(违反非空约束)
【发布时间】:2017-10-28 01:20:38
【问题描述】:

我正在尝试保存具有一对一字段的表单。

但是它不断收到错误“account_id”列中的空值违反了非空约束

不知道为什么我无法将新帐户对象保存在一对一字段中。

型号

class Account(models.Model):
   name = models.CharField(max_length=30)

class Bank(models.Model):
    account = models.OneToOneField(Account, on_delete=models.CASCADE, primary_key=True)
    bank_name = models.CharField(max_length=30)

查看

def add_bank_view(request):

    if request.method == 'POST':
        form = BankForm(request.POST)
        if form.is_valid():
            account = Account.objects.create(name='xxx')
            bankform = form.save(commit=False)
            bankform.account = account
            bankform.save()
        return HttpResponseRedirect('/add_banks/')
   else:
       form = BankForm()
   return render(request, 'bank/add_bank.html', {'form': form})

表格

class BankForm(forms.ModelForm):

class Meta:
    model = Bank
    fields = ['bank_name']

【问题讨论】:

  • 账户对象在这一点上有pk吗?你可以打印account.pk并在分配前得到结果吗?您的数据库引擎可能会在事务方面表现得很有趣。
  • account = Account.objects.create(bank_name='xxx') 你可以试试这个
  • 请发布错误的完整堆栈跟踪。

标签: django one-to-one


【解决方案1】:

感谢大家的帮助。

我发现如果尚未设置 Account 字段,则无法在一对一字段的情况下使用 ModelForm。一种解决方案是使用基本表单,然后使用基本表单中的数据在视图中设置账户和银行记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 2018-09-12
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2021-03-30
    相关资源
    最近更新 更多