不断向Django模型添加新条目

时间:2015-05-21 08:53:53

标签: django django-models

我需要一些概念上的帮助来理解这个想法是如何工作的。如果我有一个用户列表并且他们可以为每个列表添加无限项目,我将如何映射模型?

在我的列表模型中,我有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

2 个答案:

答案 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()