2015-09-22 4 views
0

Итак, у меня есть модель в моей базе данных, что я теперь понял, что не имеет смысла делать первичный ключ. Я хотел бы удалить атрибут первичного ключа из поля и использовать по умолчанию django autofield в качестве первичного ключа. Как я могу это сделать? Если я попытаюсь удалить атрибут primary_key, он создаст новое поле id, но запросит значение по умолчанию. Если я попытаюсь создать новый id = autofield, он сделает то же самое.Django - Как удалить атрибут primary_key из поля?

код ниже ...

class Textbook(models.Model): 
    textbook_name = models.CharField(max_length = 200) 
    class_name = models.CharField(max_length = 200) 
    author = models.CharField(max_length = 200) 
    isbn = models.CharField(max_length = 200) 
    auto_id = models.AutoField(primary_key = True) 

    @property 
    def NumWishes(self): 
     return self.wishlist_set.count() 
    @property 
    def NumPosts(self): 
     return self.posting_set.count() 
    @property 
    def DemSup(self): 
     if (self.posting_set.count() != 0): 
      showmethemoney = float((self.wishlist_set.count()))/(self.posting_set.count()) 
     else: 
      showmethemoney = 0 
     return showmethemoney 

    class Meta: 
     unique_together = ('class_name', 'isbn') 

    def __str__(self): 
     return self.textbook_name 

Первоначально был ISBN первичный ключ, но теперь я хочу, чтобы добавить unique_together поле с именем класса, так что я извлекая основной атрибут ключа от ISBN. В настоящее время таблица пуста, что должно сделать это проще.

Спасибо.

+0

Я сомневаюсь, что вы можете сделать это, не отбросив стол полностью. –

+0

Итак, закомментируйте все, что нужно делать с таблицами, запустите psql и отбросьте таблицы, раскомментируйте и makemigations? – Programmingjoe

+0

Не думайте, что вам нужно что-то прокомментировать. Просто отбросьте таблицы в psql, удалите все существующие миграции и снова makemigrations. –

ответ

-1

Вещи, которые я пробовал, прежде чем makemigrations и мигрируют:

-Dropping все таблицы и клиринговых миграции с командой (Не работает для меня)

-Dropping все таблицы и физически идти в папку кочевок и удаляя все, кроме init .py. (Это сработало)

Удаление таблиц в базе данных postgresql может быть завершено путем запуска: DROP TABLE "tablename";

У меня теперь есть одна миграция в моем приложении, но все работает нормально.

Смежные вопросы