python - Django:过滤与 ForeignKey 对象相关的所有操作
问题描述
我有一个名为的模型User
,如下所示:
class User(AbstractBaseUser, PermissionsMixin):
...some fields...
club = models.ForeignKey('schedule.Club', on_delete=models.CASCADE, null=True, blank=True)
对于我的应用程序,我正在创建历史项目,我想让我的用户查看他们是否已登录。到目前为止,我只显示与他们相关的历史项目:
class HistoryItems(ListView):
model = HistoryItem
template_name = 'history/history_items_table.html'
context_object_name = 'history_items'
def get_context_data(self, **kwargs):
history_item_query = HistoryItem.objects.filter(Q(changed_by=self.request.user) | Q(object_id=self.request.user.pk)).select_related('changed_by', 'content_type')
return {
'filter_history_form': HistoryFilterForm(),
'history_items': history_items,
}
因此,如果他们改变或改变自己的东西,他们可以看到。但现在我也想向他们展示他们选择的俱乐部所做的所有改变。因此,例如,如果“User1”将“Club1”作为 ForeignKey,并且我将 Club1 的名称更改为 Club2,我希望 User1 在历史记录项中看到它。
我的历史模型如下所示:
class HistoryItem(models.Model):
changed_at = models.DateTimeField('Changed At', auto_now_add=True)
description = models.TextField('Description', max_length=300)
changed_by = models.ForeignKey('users.User', on_delete=models.SET_NULL, related_name="history_items", null=True)
action = models.CharField('Action', max_length=50, choices=ACTION_CHOICES)
difference = JSONField('Differences', encoder=DjangoJSONEncoder, null=True, blank=True)
# Generic object foreign key
object_id = models.IntegerField()
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
content_object = GenericForeignKey('content_type', 'object_id')
我将如何“重建”我history_item_query
的才能实现这一目标?这甚至可能吗?或者我必须在我的俱乐部模型中创建一个自定义函数吗?
感谢所有答案!:)
解决方案
你不能简单地做:
history_item_query = HistoryItem.objects.filter(Q(changed_by=self.request.user) | Q(object_id=self.request.user.pk) | Q(content_object=self.request.user.club)).select_related('changed_by', 'content_type')
如果这不起作用,请获取用户俱乐部的内容类型和对象并对其进行过滤。
推荐阅读
- java - 如何使应用程序关闭其自身的所有旧实例
- excel - vba日期格式
- oracle - Oracle SQL 枚举替换(不在 Pl SQL 中)
- angular - 如何将元素传递给另一个组件(最简单的方法)?
- android - Firebase 事件参数混淆
- python - 如何通过pyspark中的列将行添加到另一个数据框中的数据框中
- c++ - 有人可以帮我解决这个问题,即找到总和为 k 的数组元素对的索引吗?
- amazon-web-services - 为什么 Appsync 订阅不适用于对象输入参数?
- php - Yii2 rest api getBodyParams() 无法获取参数加载(Yii::$app->getRequest()->getBodyParams(), ''); 来自反应原生帖子
- hibernate - 春天/休眠。操作实体引用损坏的 FK(有意)