mrNicky
mrNicky

Reputation: 155

Null value in column “marque_id” violates not-null constraint - Django 2.1.7

I have an issu with django, when I run django shell, and try to add some value in my database, I have an error. I used python manage.py migrations and python manage.py migrate before.

>from store.models import Marque, Model
charger = Model(name="Charger")
charge.save()

--- then I have this error, it work fine if I create "Marque" object

Null value in column “marque_id” violates not-null constraint

from django.db import models

# Create your models here.

class Contact(models.Model):
    email = models.EmailField(max_length=100)
    name = models.CharField(max_length=200)

class Marque(models.Model):
    name = models.CharField(max_length=200, unique=True)


class Model(models.Model): #Multiples Model to One Marque
    reference = models.IntegerField(null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    available = models.BooleanField(default=True)
    name = models.CharField(max_length=200)
    picture = models.URLField()
    marque = models.ForeignKey(Marque, on_delete=models.CASCADE)

class Booking(models.Model): #mutliples Booking to one Contact
    created_at = models.DateTimeField(auto_now_add=True)
    contacted = models.BooleanField(default=False)
    marque = models.OneToOneField(Marque, on_delete=models.CASCADE)
    model = models.OneToOneField(Model, on_delete=models.CASCADE)
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)

Requirement.txt: Django==2.1.7 django-debug-toolbar==1.11 psycopg2==2.7.7 psycopg2-binary==2.7.7 pytz==2018.9 sqlparse==0.2.4

Upvotes: 2

Views: 1623

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477513

Your Model model contains a ForeignKey named marque:

class Model(models.Model): #Plusieurs models pour une marque
    # ...
    marque = models.ForeignKey(Marque, on_delete=models.CASCADE)

This is a ForeignKey that is non-NULLable (it does not contain null=True as parameter), but you did not provide a reference to a Marque object, hence the error.

In order to solve this, you either have to provide a Marque object, for example:

from store.models import Marque, Model

marque1 = Marque.objects.create(name='my_marque')

charger = Model(name="Charger", marque=marque1)
charge.save()

Or you can make the ForeinKey nullable, but of course this changes the modeling:

class Model(models.Model): #Plusieurs models pour une marque
    # ...
    marque = models.ForeignKey(
        Marque,
        on_delete=models.CASCADE,
        null=True,
        default=None
    )

Upvotes: 5

Related Questions