Вы можете построить CustomAttributeBuilder
для вашего атрибута:
Type[] ctorParams = new Type[] { /*Types of your Attributes Constructor*/ };
ConstructorInfo classCtorInfo = typeof(ColumnAttribute).GetConstructor(ctorParams);
CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(
classCtorInfo,
/*arguments for your Attribute*/);
propertyBuilder.SetCustomAttribute(myCABuilder);
Объекты форм не имеют своих полей в качестве атрибутов, вам нужно искать в атрибуте «fields», который словарь:
self.fields['author'].queryset = choices
Если вы хотите полностью понять, что здесь происходит, вас может заинтересовать этот ответ - он о моделях, но формы работают аналогично.
Хотя Карл и прав насчет полей, вы также пропускаете вызов суперкласса. Вот как я это делаю:
class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())
class Meta:
model = Book
def __init__(self, *args, **kwargs):
letter = kwargs.pop('letter')
super(BookForm, self).__init__(*args, **kwargs)
choices = getChoices(letter)
self.fields['author'].queryset = choices