Bob KapusAkba
Bob KapusAkba

Reputation: 65

Django Why is one field created when I apply migrations?

There are models, why after python manage.py makemigrations is created only by 1 field in migrations, how to fix it? I tried doing manage.py migrate --fake zero, and doing the migrations again, but nothing.The app is registered in settings. enter image description here

from django.db import models
from django.urls import reverse

class Category(models.Model):

   image = models.ImageField(default='default.png', upload_to='category_image'),
   title = models.CharField(max_length=50, db_index = True),

   def __str__(self):
        return self.title

   def get_absolute_url(self):
        return reverse('category_detail_url', kwargs={'title': self.title})


class Provider(models.Model):

    name = models.CharField(max_length=50, db_index = True),
    phone_number = models.CharField(max_length=12, db_index = True),
    address = models.CharField(max_length=50, db_index = True),

    def __str__(self):
            return self.name


class Product(models.Model):

    title = models.CharField(max_length=50, db_index = True),
    receipt_date = models.DateTimeField(auto_now_add=True, blank=True),
    quantity_stock = models.IntegerField(),
    quantity_store = models.IntegerField(),
    purchase_price = models.IntegerField(),
    image = models.ImageField(default='default.png', upload_to='product_image'),
    provider = models.ForeignKey(Provider, null = True ,related_name='to_provider',on_delete=models.CASCADE),
    category =  models.ForeignKey(Category, null = True ,related_name='to_category',on_delete=models.CASCADE),

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('product_detail_url', kwargs={'title': self.title})


class Sale(models.Model):

    product  = models.ForeignKey(Product, related_name='to_product',on_delete=models.CASCADE),
    date_of_sale = models.DateTimeField(auto_now_add=True, blank=True),
    quantity_goods_sold = models.IntegerField(),
    retail_price = models.IntegerField(), 

    def __str__(self):
        return self.id

Upvotes: 0

Views: 158

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477607

Your fields should not end with a comma (,). If you add a trailing comma, it will wrap the field in a singleton tuple, and thus Django is then not able to detect the field:

from django.db import models
from django.urls import reverse

class Category(models.Model):
   image = models.ImageField(default='default.png', upload_to='category_image')
   title = models.CharField(max_length=50, db_index = True)

   def __str__(self):
        return self.title

   def get_absolute_url(self):
        return reverse('category_detail_url', kwargs={'title': self.title})


class Provider(models.Model):
    name = models.CharField(max_length=50, db_index=True)
    phone_number = models.CharField(max_length=12, db_index=True)
    address = models.CharField(max_length=50, db_index=True)

    def __str__(self):
        return self.name


class Product(models.Model):
    title = models.CharField(max_length=50, db_index = True)
    receipt_date = models.DateTimeField(auto_now_add=True, blank=True)
    quantity_stock = models.IntegerField()
    quantity_store = models.IntegerField()
    purchase_price = models.IntegerField()
    image = models.ImageField(default='default.png', upload_to='product_image')
    provider = models.ForeignKey(
        Provider,
        null=True,
        related_name='products',
        on_delete=models.CASCADE
    )
    category =  models.ForeignKey(
        Category,
        null=True,
        related_name='products',
        on_delete=models.CASCADE
    )

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('product_detail_url', kwargs={'title': self.title})


class Sale(models.Model):

    product = models.ForeignKey(
        Product,
        related_name='sales',
        on_delete=models.CASCADE
    )
    date_of_sale = models.DateTimeField(auto_now_add=True, blank=True)
    quantity_goods_sold = models.IntegerField()
    retail_price = models.IntegerField()

    def __str__(self):
        return self.id

Upvotes: 1

Related Questions