gpt4 book ai didi

Django: "limit_choices_to"不适用于 ManyToManyField

转载 作者:行者123 更新时间:2023-12-02 11:54:38 25 4
gpt4 key购买 nike

我正在运行 Django 1.1,无法让“limit_choices_to”选项让我的 ManytoManyField 正常工作。

我有两个模型:

class MemberPhoto(ImageModel):
title = models.CharField(_('title'), max_length=255, blank=True, null=True)
caption = models.CharField(_('caption'), max_length=255, blank=True, null=True)
date_added = models.DateTimeField(_('date added'), default=datetime.now, editable=False)
member = models.ForeignKey(User)

def __unicode__(self):
return u'%s (%s)' % (self.member.username, self.id)

class lock(models.Model):
user = models.ForeignKey(User, related_name="owner")
to_user = models.ForeignKey(User, related_name="to_user")
unlocked_photos = models.ManyToManyField(MemberPhoto, blank=True, null=True, limit_choices_to = {'member':'user'})
objects = locking_manager()

在第二个模型中,我想确保在 Django 管理中,多重选择字段中显示的唯一“unlocked_photos”(“MemberPhoto”对象)是那些具有相同“member”值(User 对象)的对象作为“锁定”对象的“用户”(也是一个用户对象)。

我以为我已经遵循了 Django 文档,但它不起作用。我收到以下错误:

TemplateSyntaxError

Caught an exception while rendering: invalid input syntax for integer: "user"

我尝试将“limit_choices_to”更改为:

limit_choices_to = {'member': user} --- 不起作用

limit_choices_to = {'member__username':'kyle'} --- 这确实有效,但没用,我只是手动指定用户名

我怎样才能从当前的“锁定”对象中获取用户并通过该对象过滤 MemberPhoto“成员”属性?

感谢任何可以提供帮助的人。

凯尔

最佳答案

我在这个链接中找到了一个完全符合我想要的答案:Django MTMField: limit_choices_to = other_ForeignKeyField_on_same_model? ,我在这里为遇到同样问题的人发布我的工作代码。环顾四周看来,“limit_choices_to”可能根本无法实现我想要的,而自定义管理员使用的表单是可行的方法:

from django.contrib import admin
from django import forms
from gayhop.apps.locking.models import lock
from gayhop.apps.photos.models import MemberPhoto

class LockAdminForm(forms.ModelForm):
class Meta:
model = lock

def __init__(self, *args, **kwargs):
super(LockAdminForm, self).__init__(*args, **kwargs)
self.fields['unlocked_photos'].queryset = MemberPhoto.objects.filter(member=self.instance.user)


class LockAdmin(admin.ModelAdmin):
form = LockAdminForm
filter_horizontal = ('unlocked_photos',)

django.contrib.admin.site.register(lock, LockAdmin)

您需要更改的是:

  1. 模型的名称(在上面的示例中为“lock”)
  2. 模型中 ManyToManyField 字段的名称(在上面的示例中为“unlocked_photos”)
  3. 相关模型的名称(在上面的示例中为“MemberPhoto”)
  4. 您想要用来过滤相关对象的字段的名称(在上面的示例中为“member”)
  5. 要用于过滤相关对象的字段值(以“self.instance”开头,然后是字段的名称,在上面的示例中为“user”)
  6. 最后确保自定义管理表单和管理模型的类名称全部匹配。

希望这对某人有帮助!

关于Django: "limit_choices_to"不适用于 ManyToManyField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133455/

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