gpt4 book ai didi

python - 拥有一个与多个不同模型相关的模型

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:33 24 4
gpt4 key购买 nike

我有一个简单的通知模型:

class Notification(models.Model):
user = models.ForeignKey(User)
sender = models.ForeignKey(User)
model = '''What to put here?'''
comment = models.CharField(max_length=200)
created = models.DateTimeField(auto_now=False,auto_now_add=True)

例如,我需要与多个不同模型相关的通知;帖子、用户关注等

在 django 中是否可以关联多个模型,而不是为每个模型创建一个通知模型?

我想避免这样的模型:PostLikeNotification、UserFollowNotification 等

那么django有这个功能吗?我在文档中找不到它。

最佳答案

您可以使用Content Types/Generic Relations

class Notification(models.Model):
user = models.ForeignKey(User)
sender = models.ForeignKey(User)
object_id = models.PositiveIntegerField(default=None, null=True)
content_type = models.ForeignKey(ContentType, default=None, null=True)
comment = models.CharField(max_length=200)
created = models.DateTimeField(auto_now=False,auto_now_add=True)

@property
def model_object(self):
content_type = self.content_type
object_id = self.object_id
if content_type is not None and object_id is not None:
MyClass = content_type.model_class()
model_object = MyClass.objects.filter(pk=object_id)
if model_object.exists():
return model_object.first()
return None

这里我们将相关对象的模型( Using the Content Types framework )和主键(在本例中必须是整数)存储在通知模型中,然后添加一个属性方法来获取相关对象。

通过此功能,您可以将您的通知与任何其他模型相关联。您还可以使用ForeignKey.limit_choices_to content_type 字段上的参数来验证它是否只接受某些模型。

关于python - 拥有一个与多个不同模型相关的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933857/

24 4 0
文章推荐: c# - 如何在 asp.net c# 中使用 HashSet 比较两个数据集
文章推荐: ruby-on-rails - Stripe,取消订阅 Ruby on Rails
文章推荐: c# - 网络凭据未保存在 CredentialCache 中
文章推荐: python - 使用Python CGI显示
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com