NOT NULL约束失败:loginpage_location.org_标识

2024-10-03 09:16:36 发布

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

我是django的新手,正在学习掌握整个事情的窍门。我不太清楚为什么会有这个问题。在

我已经查过一些stackoverflow问题,但作为一个新手,我无法从解释中理解太多。如果可能的话,我想知道“为什么”和“怎么做”。在

在视图.py在

def orgdataentry(request):

    if request.user.is_authenticated:
        orgdataform = OrgDataEntryForm(data=request.POST or None)
        orglocform = OrgLocEntryForm(data=request.POST or None)
        if orgdataform.is_valid() and orglocform.is_valid():
            #fs = orgdataform.save(commit=False)
            #fs.user = request.user
            orgdataform.save()

            orglocform.org = request.POST['org_name']
            #fs = orglocform.save(commit=False)
            #fs.user = request.user
            orglocform.save()

            return HttpResponse('Success')
        else:
            return render(request, 'org_login/dataentry.html', {'orgdataform': orgdataform, 'orglocform': orglocform})

    else:
        return redirect('login')

我也尝试过用带注释的代码行运行代码,但没有成功

在表单.py在

^{pr2}$

以及模型.py在

class OrgType(models.Model):

    org_type_id = models.AutoField(primary_key=True)
    org_external = models.BooleanField(default=True)
    org_sector = models.CharField(max_length=50, default='', verbose_name='Sector')
    org_type_des = models.CharField(max_length=50, null=True, verbose_name='Sector Description')

    def __str__(self):
        return self.org_sector


class Organization(models.Model):

    org_id = models.AutoField(primary_key=True)
    org_name = models.CharField(max_length=50, default='', verbose_name='Company Name')
    org_type = models.ForeignKey(OrgType, on_delete=models.CASCADE, verbose_name='Company Type')
    org_inc_date = models.DateField(blank=True, null=True, verbose_name='Incorporation Date', help_text='Please specify in DD/MM/YYYY format')
    org_email = models.EmailField(max_length=50, null=True, verbose_name='Email ID')
    org_contact = models.CharField(max_length=20, default='', verbose_name='Contact Number')
    org_esc_number = models.CharField(max_length=20, blank=True, null=True, verbose_name='Escalation Number')
    org_hq = models.CharField(max_length=50, default='', verbose_name='Main Office City')
    org_des = models.TextField(max_length=1000, blank=True, null=True, verbose_name='Company Description')

    def __str__(self):
        return self.org_name


class Location(models.Model):

    loc_id = models.AutoField(primary_key=True)
    org = models.ForeignKey(Organization, on_delete=models.CASCADE, verbose_name='Company Name')
    addline1 = models.CharField(max_length=70, blank=True, null=True, verbose_name='Address Line 1')
    addline2 = models.CharField(max_length=70, blank=True, null=True, verbose_name='Address Line 2')
    addline3 = models.CharField(max_length=70, blank=True, null=True, verbose_name='Address Line 3')
    org_country = models.CharField(max_length=20, default='', verbose_name='Country')
    org_state = models.CharField(max_length=20, default='', verbose_name='State')
    org_city = models.CharField(max_length=20, default='', verbose_name='City')
    org_zip = models.CharField(max_length=10, default='', verbose_name='Pin-code')
    org_loc_des = models.TextField(max_length=200, blank=True, null=True, verbose_name='Location Description')

    def __str__(self):
        return self.org.org_name + ': ' + self.org_city

我希望这可能是唯一的问题,如果这样做,那将是伟大的。正在保存orgdataform,问题是在保存orglocform时发生的。在

好吧,现在让我把自己弄清楚。出于明显的原因,我不希望公司给其他客户,为了实现这一点,我需要将位置相关的外键分配给什么。如果可能的话,请让我知道,因为这可能会真正解决这个问题,因为我只想知道这个问题的答案。在


Tags: nameorgselftruedefaultverbosemodelsrequest
1条回答
网友
1楼 · 发布于 2024-10-03 09:16:36

我不应该回答这个问题,因为您没有提供所有相关的信息,但是从您的代码中快速查看一下,问题非常肯定地出现在这里:

orglocform.org = request.POST['org_name']
orglocform.save()

这在两点上是错误的:首先,设置orglocform.org不会做任何有用的事情(它只是在表单实例本身上设置一个完全无用的.org属性,而这个属性不会对它做任何事),当Location模型想要的是一个Location实例时,将其设置为(request.POST['org_name'])是一个字符串(而且FWIW request.POST['org_name']是一个未经初始化的用户输入,因此表单不使用它实际上是件好事)。在

您的Location模型需要一个Organization实例,因此您需要首先创建Organization并保持对它的引用,然后检索部分初始化但尚未保存的Location实例,将其org字段设置为新创建的Organization实例并(最后)保存它:

^{pr2}$

相关问题 更多 >