我想在我的桌子门票上做反向关系。
这是我的模特:
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(票)
我要解决的问题是获取发票的人的用户名,(无request.user)
所以我试着这样:
ticket = Tickets.objects.get(pk = 1)
ticket.user_detail_set.user.username
但我得到
AttributeError:'ManyRelatedManager'对象没有属性'user'
感谢您的收看,希望您能理解。
答案 0 :(得分:2)
由于您设置了多对多关系,因此Ticket
可能包含许多User_Detail
个对象。因此,Ticket.user_detail_set
是经理,而不是单个对象。您可以获得与Ticket
相关联的第一个用户:
ticket.user_detail_set.first().user.username
但听起来你实际上想要Ticket
和User_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
模型,除非您在应用程序的其他地方使用它和/或它的字段多于此处显示的字段。