2014-12-21 173 views
1

我想在我的表格Tickets上做一個反向關係。Django ManyToManyField反向關係

這裏是我的模型:

class Tickets(models.Model): 
    ticket_title = models.CharField(max_length=100) 
    ticket_content = models.TextField() 

class User_Detail(models.Model): 
    user = models.OneToOneField(User) 
    tickets = models.ManyToManyField(Tickets, blank=True, null=True) 

創建我的票這樣的:

ticket = Tickets.objects.create(ticket_title="test", ticket_content="test content")

request.user.user_detail.tickets.add(ticket)

,我有一個問題,我們該做的是讓這個傢伙的用戶名誰發佈票,(不request.user)

所以我嘗試這樣的:

ticket = Tickets.objects.get(pk=1)

ticket.user_detail_set.user.username

,但我得到

AttributeError的:「ManyRelatedManager」對象有沒有屬性「用戶」

感謝您的收看,我希望你能夠理解。

回答

2

由於您建立了多對多關係,Ticket可能有許多User_Detail對象。因此,Ticket.user_detail_set是一個管理器,而不是一個單一的對象。您可以得到一個Ticket喜歡此相關的第一個用戶:

ticket.user_detail_set.first().user.username 

但它聽起來像你真正想要TicketUser_Detail之間的一個一對多的關係,這意味着你真正想要Ticket有外國關鍵關係。你的模型也許應該是這樣的:

class User_Detail(models.Model): 
    user = models.OneToOneField(User) 

class Ticket(models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length=100) 
    contents = models.TextField() 

然後,你可以這樣做:

ticket = Ticket.objects.get(pk=1) 
user = ticket.user 

你甚至可以完全省略User_Detail模型,除非你在你的應用程序的其他地方使用它和/或它具有比這裏顯示的更多的字段。

+0

我愛你的男人,非常感謝! – Pamk