Я видел все инструкции о том, как вы можете установить ModelMultipleChoiceField для использования пользовательского набора запросов, и я попробовал их, и они работают. Однако все они используют одну и ту же парадигму: набор запросов - это просто отфильтрованный список одинаковых объектов.
В моем случае я пытаюсь заставить администратора нарисовать форму с множественным выбором, чтобы вместо использования имен пользователей в качестве текстовой части я хотел бы использовать поле name
из своего класса учетной записи.
Вот разбивка того, что у меня есть:
# models.py
class Account(models.Model):
name = models.CharField(max_length=128,help_text="A display name that people understand")
user = models.ForeignKey(User, unique=True) # Tied to the User class in settings.py
class Organisation(models.Model):
administrators = models.ManyToManyField(User)
# admin.py
from django.forms import ModelMultipleChoiceField
from django.contrib.auth.models import User
class OrganisationAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
from ethico.accounts.models import Account
self.base_fields["administrators"] = ModelMultipleChoiceField(
queryset=User.objects.all(),
required=False
)
super(OrganisationAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = Organisation
Это работает, однако, я хочу, чтобы queryset
выше рисовал блок выбора со свойством Account.name
и свойством User.id
. Это не сработало:
queryset=Account.objects.all().order_by("name").values_list("user","name")
Не удалось с этой ошибкой:
'tuple' object has no attribute 'pk'
Я подумал, что это будет легко, но это превратилось в часы тупиков. Кто-нибудь хочет пролить свет?