#python #django #django-forms #django-admin #modelmultiplechoicefield
Вопрос:
Пока я создаю новую фирму, я могу добавлять пользователей без каких-либо ошибок. Но пока я пытаюсь обновить фирму, я выбрал по умолчанию пользователей, которые уже немощны, используя initial
поле с (я не уверен, что это хороший метод). Я получаю эту ошибку
Выберите правильный выбор. 3 не является одним из доступных вариантов
Я думаю, что мой метод выбора по умолчанию не очень хорош.
Models.py
class CustomUser(models.Model):
username = models.CharField(max_length=20)
...<fields>....
firm = models.ForeignKey(
'Firm',
null = True,
blank = True,
on_delete = models.Set_NULL,
related_name = 'users'
)
class Firm(models.Model):
firm_name = models.CharField(max_length=20)
.....<fields>.....
Forms.py
class FirmAdminForm(forms.ModelForm):
users = forms.ModelMultipleChoiceField(
widget = FilteredSelectMultiple('username', is_stacked=False),
queryset=User.objects.exclude(is_staff=True).filter(firm=None),
required=False,
)
class Meta:
model = Firm,
fields = [...<other fields>, 'users']
def save(self, commit=True):
# Save the provided password in hashed format
firm = super().save(commit=False)
users = self.cleaned_data['users']
firm.users.set(users)
return firm
Admin.py
class FirmAdmin(admin.ModelAdmin):
form = FirmAdminform
...other codes .....
def render_change_form(self, request, context, add, change, form_url, obj):
users = SalesToolUser.objects.exclude(is_staff=True).filter(partner_firm=None)
if obj:
partner_agents = obj.users.all()
users = User.objects.exclude(is_staff=True).filter(Q(firm=None)|Q(firm=obj))
context['adminform'].form.fields['users'].initial = partner_agents
context['adminform'].form.fields['users'].queryset = users
return super().render_change_form(request, context, add=add, change=change, form_url=form_url, obj=obj)
Комментарии:
1. Я не понимаю, какова именно ваша модель пользователя? У вас есть
CustomUser
,User
иSalesToolUser
, похоже, вы используете все это взаимозаменяемо… Плюс я не понимаю необходимости делать этот фильтр,render_change_form
разве вы уже не делаете это в форме?? Плюс установка этого начального значения, опять же, вам не нужно делать, чтобы форма обрабатывала начальные значения при обновлении экземпляра, поскольку это форма модели…