我需要一些概念上的帮助来理解这个想法是如何工作的。如果我有一个用户列表并且他们可以为每个列表添加无限项目,我将如何映射模型?
在我的列表模型中,我有user = ForeignKey(User)
,因此此列表模型的每个实例都归因于当前登录的用户,并且他们可以拥有一系列列表。但是,如果他们想要将一个项目添加到列表中,我是否会有一个名为add_item
的新模型并生成list_name = foreignkey(user.listname)
?
#New List Model
class NewList(models.Model):
user = models.ForeignKey(User)
list_name = models.CharField(max_length = 100, default = "Enter List Name")
picture = models.ImageField(upload_to='profile_images', blank=True)
def __unicode__(self):
return self.list_name
#New Item Model
class NewItem(models.Model):
lists = models.ForeignKey(NewList)
# list_name = models.OneToOneField(User.list_name)
def __unicode__(self):
return self.user.username
答案 0 :(得分:3)
如果我理解正确,
class MyList(models.Model):
user = ForeignKey(User)
list_name = CharField(...)
....
def list_items(self):
return self.mylistitems_set.all()
class MyListItem(models.Model):
mylist = ForeignKey(MyList)
item_name = .....
....
用户可以创建他/她想要的任意数量的列表,并且可以将任意数量的项目添加到特定列表。因此,逻辑是您创建任意数量的列表(MyList上的记录),并通过MyListItem
添加任意数量的项目。
以下是一种很好的方法:
alist = MyList(......)
alist.mylistitem_set.create(...) # add an item to alist
Django Reverse relations documentation is here
更新:获取特定用户的所有列表
user = User.objects.get() # a specific user
user.mylist_set.all() # returns all lists belong to that user.
你必须在django中阅读更多关于反向关系的内容。
答案 1 :(得分:0)
听起来很对。如果您的模型名为MyList
,那么:
my_user = ... # obtain a user object
my_item = MyList(user=my_user)
my_item.save()