user1409289
user1409289

Reputation: 542

Integrity error in django form saving

Hey folks I have my model like :

class Rule(models.Model):
    Ruleinfo = models.CharField(max_length=5,null=False)
    Ispname  = models.CharField(max_length=5,null=False)
    priority = models.ForeignKey('Priority',related_name ="priority1")
    From  =    models.IPAddressField(null=True)
    To = models.IPAddressField(null=True)
    def __unicode__(self):
        return u'%s %s %s %s %s %s %s %d' % (self.Ruleinfo, self.Ispname, self.priority,
                                      self.From, self.To)


class Priority(models.Model):  
    priority =  models.IntegerField(null = True)
    ispname = models.ForeignKey('Rule' ,related_name="ispname1")
    rule = models.ForeignKey('Rule',related_name="rule1")

and here is my forms

class RuleInfoForm(ModelForm):
     Ruleinfo = forms.CharField(max_length=5)   
     Ispname  = forms.CharField(max_length=5)
     priority = forms.IntegerField()
     From  =       forms.IPAddressField()   
     To    =       forms.IPAddressField()
     class Meta:
        model = Rule
        fields = ("Ruleinfo","Ispname","priority","From","To") 

I am saving this form in my views as follow

def multiwanrule_info(request):
    data = {}
    try:
       form = RuleInfoForm(request.POST)
    except:
        pass
    if form.is_valid():
        rl_frm = form.save(commit=False)
        rl_frm.save()
    else:

        form = RuleInfoForm() 
        data['form'] = form    
    return render_to_response('networking.html',data)

But i am getting integrity error i.e

networking_rule.priority_id may not be NULL

why i am getting this error? Why it is not taking automatically like other tables

Upvotes: 1

Views: 2079

Answers (1)

Burhan Khalid
Burhan Khalid

Reputation: 174624

Your problem lies here:

 rl_frm = form.save(commit=False)
 rl_frm.save()

Since you don't have null=True in your ForeignKey, a valid foreign key is required; which you have not passed here.

So you should set the ForeignKey to null=True, then probably assign it:

 r1_frm.priority.pk = 1 # some primary key to a valid Priority object
 r1_frm.save()

Upvotes: 1

Related Questions