2016-01-27 55 views
2

我想設置一個多對多的關係的外鍵,而不必指定字段或(指定它不影響現有的邏輯)。如何通過Django將外鍵設置爲默認值?

monitor.py

class QuoteMonitor(g.UserModel): 
    quote_services = m. OneToOneField(g.QuoteService) 

quote.py

class Quote(g.UserModel): 
    name = m.CharField(max_length=512, default='New Quote') 
    services = m.ManyToManyField(g.Service, blank=True) 

class Service(g.UserModel): 
    name = m.CharField(max_length=512, default='New Service') 

因爲g.QuoteService模型不存在,我不能做到這一點現在。該表是由django多對多字段自動創建的。

可能嗎?

編輯:

question提供了類似的回答。

+0

您的描述非常混亂。你是什​​麼意思「爲多對多關係設置外鍵」? 'Quote'和'QuoteMonitor'之間有什麼關係?什麼是'g.QuoteService'?什麼是'g.Service'? –

+0

我的意思是這個。 Im顯示了我想在「monitor.py」中實現的與「quote.py」中不存在的外鍵模型的關係的示例。 QuoteService是報價和服務模型之間的關係。 QuoteMonitor是我想要與這種關係相關的模型。 –

回答

2

您可以爲django自動創建的多對多關係創建非託管模型。

class QuoteService(models.Model): 
    quote = m.ForeignKey(g.Quote) 
    service = m.ForeignKey(g.Service) 

    class meta: 
     db_table = 'table-name-goes-here' 
     managed = False 

然後你就可以創建引用ForeignKey的通過或1-1場的M2M關係的模型:

class QuoteMonitor(g.UserModel): 
    quote_service = m.OneToOneField(g.QuoteService) 

注意:應在第二遷移創建QuoteMonitor,你的初始模型已經經過創建。

+1

謝謝,這對我很有用。最初的模型已經創建好了,所以沒有問題。 –