gpt4 book ai didi

基于所选 FK 的 Django 限制多对多查询集

转载 作者:行者123 更新时间:2023-12-04 00:42:39 24 4
gpt4 key购买 nike

我有一个看起来像这样的模型:

class Invite(models.Model):
user = models.ForeignKey(User)
event = models.ForeignKey(Event)
roles = models.ManyToManyField(Role, blank=True, null=True)
sent = models.BooleanField("Invite Sent", default=False, editable=False)
created = models.DateTimeField(auto_now_add=True)

def __unicode__(self):
return u"%s" % self.user

class Meta:
unique_together =(('user','event'),)


class Role(models.Model):
"""
This associates a user's role to an event
"""
event = models.ForeignKey(Event, related_name="roles")
roletype = models.ForeignKey(RoleType)
profiles = models.ManyToManyField(Profile, related_name="roles",
blank=True, null=True)
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)

因此,每当创建一个新事件时,就会随之创建一堆角色。在邀请模型中,如何仅显示与我在 Django Admin 中的更改表单中选择的事件相关联的角色,而不是显示角色模型中的所有条目?

最佳答案

您想动态过滤 roles 的选择choices ,所以你需要 ajax来执行此任务。

以下是如何使这项工作..

1: OnChangeevent发送 event_id到您的定制 view通过 ajax .

2:来自 Roles型号 filter基于 event_id你从 ajax 得到的请求并返回过滤后的 roles来自 serializing进入 JSON .

3:清除现有 roles并通过解析 JSON 重新填充回应。

例如:
这是一个 jquery getJSON例子

javascript:

$("#event").change(function (){         
var event_id = $(this).val();
$.getJSON("/my-app/my-roles-filter-view/"+ event_id +"/",function(data){
var roles_dd = $("#roles");
$('#event >option').remove();
$.each(data, function(index,value) {
roles_dd.append($("<option />").val(value).text(value));
});
})(django.jquery);

网址:
('^/my-app/my-roles-filter-view/(?P<event_id>\d+)/$','my_view'),

浏览次数:
def my_view(request,event_id):
qs = Role.objects.filter(event=event_id).values_list('id')
return HttpResponse(simplejson.dumps(qs),mimetype='application/javascript')

这只是一个使用 jquery 的例子您可以使用任何类型的 ajax并实现这一目标。

关于基于所选 FK 的 Django 限制多对多查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677832/

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