gpt4 book ai didi

python - Django 将项目添加到多对多关系

转载 作者:行者123 更新时间:2023-12-02 15:00:54 26 4
gpt4 key购买 nike

我是 django 的新手,所以这个问题。我有以下 Feed 对象和一个具有多对多关系的 User 对象

class Feed(Base):
headline = models.CharField(max_length=255)
link = models.CharField(max_length=255)
summary = models.TextField()
reader = models.ManyToManyField(User, through='Bookmark')

class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True, max_length=255)
mobile = PhoneNumberField(null=True)
username = models.CharField(null=True, unique=True, max_length=255)
full_name = models.CharField(max_length=255, blank=True, null=True)

两者通过 Bookmark 对象相关联。

class Bookmark(Base):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
feed = models.ForeignKey(Feed, on_delete=models.CASCADE, null=True)

我的问题是,

  1. 如何向用户添加书签(或者说提要)?

  2. 如何获取用户已添加书签的所有提要?

感谢任何帮助。

最佳答案

好吧,让我们从头开始。

您可能知道,当您使用 Django 生成 M2M 关系时,您会使用 ManyToManyField。如果您不关心 M2M 表的详细信息,Django 会为您管理它。如果要指定中间表,可以使用 ManyToManyField.through。就像你做的一样。出于解释目的,我将简化您的模型。像这样:

class User(models.Model):
username = models.CharField(null=True, unique=True, max_length=255)

class Feed(models.Model):
headline = models.CharField(max_length=255)
reader = models.ManyToManyField(User, through='Bookmark')

class Bookmark(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
feed = models.ForeignKey(Feed, on_delete=models.CASCADE, null=True)

让我们启动 Django 交互式 shell。我假设您有一个空数据库。

$ django manage.py shell

首先导入你的模型

>>> from yourAppName.models import * 

现在,创建一些数据:

>>> from bat.models import *
>>> u1 = User(username = 'foo')
>>> u1.save()
>>> u2 = User(username = 'bar')
>>> u2.save()
>>> User.objects.all() # get Users u1 and u2
<QuerySet [<User: User object>, <User: User object>]>
>>> f1 = Feed(headline = 'How to use M2M in Django')
>>> f1.save()
>>> Feed.objects.all() # get Feed f1
<QuerySet [<Feed: Feed object>]>
  1. How do I add a bookmark (or rather feed) to the user?

在这种情况下,您不能使用 Feed.reader.add(u1),您必须使用 Bookmark 的管理器,因为您指定了它是您的中间模型。

>>> b1 = Bookmark(user=u1, feed = f1) # add Feed f1 to User u1
>>> b1.save() # save into database

我们还可以添加另一个书签:

>>> f2 = Feed(headline = 'Fetching data in Django like a pro!')
>>> f2.save()
>>> b2 = Bookmark(user=u1, feed = f2) # add Feed f2 to User u1
>>> b2.save() # save into database

你完成了!现在,我们可以检查是否一切正常。

>>> brandNewBookMark = Bookmark.objects.all()[0] # get the first bookmark
>>> print(brandNewBookMark.user.username) # it's Foo!
foo
>>> print(brandNewBookMark.feed.headline) # Foo subscribed to f1!
u'How to use M2M in Django'
  1. How do I fetch all the feeds the User has bookmarked?

您可以简单地利用 Feed.reader 字段。例如,

>>> for f in Feed.objects.filter(reader = u1):
... print(f.headline)
...
How to use M2M in Django
Fetching data in Django like a pro!

就是这样!更多信息 here .

关于python - Django 将项目添加到多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49784218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com