ait Seçimleri değiştirme nasılen Bazı yapmacık modelleri var diyelim ModelMultipleChoiceField
class Author(Model):
name = CharField()
class Book(Model):
title = CharField()
author = ForeignKey(Author)
Ve ı Defteri için bir ModelForm kullanmak istediğiniz diyelim:
class BookForm(ModelForm):
class Meta:
model = Book
Basit şimdiye kadar. Fakat şunu da söyleyeyim, veritabanımda bir ton Yazar var ve ben böyle uzun bir çoktan seçmeli alana sahip olmak istemiyorum. Öyleyse, BookForm'un ModelMultipleChoiceField yazarlık alanındaki sorgulamayı kısıtlamak istiyorum. Ayrıca istediğim queryset'in, iletilecek bir argümana dayandığı için __init__
'a kadar seçilemeyeceğini de söyleyelim. bu sadece ben burada olmazdım çalıştı eğer, Elbette
class BookForm(ModelForm):
class Meta:
model = Book
def __init__(self, letter):
# returns the queryset based on the letter
choices = getChoices(letter)
self.author.queryset = choices
: Bu hile yapabilir gibi
Bu gibi görünüyor. Bu bana bir AttributeError verir. 'BookForm' nesnesinin 'author' özelliği yoktur. aynı sonucu üretir
class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())
class Meta:
model = Book
def __init__(self, letter):
choices = getChoices(letter)
self.author.queryset = choices
: Yani, Ben de ModelForm varsayılan alanını geçersiz kılmak ve daha sonra ayarlamak için denemek böyle bir şey denedik.
Bunun nasıl yapılmasının amaçlandığını bilen var mı? nitelikleri, bir sözlük olan "alanları" özelliğiyle de bakmak gerekir olarak
Evet, gerçek sorun alanım süper sınıf çağrısına sahip, ancak bu örnek için atladım. – Brian
Yeterince adil. Bunu, bu sorunun cevabını gezen herkes için terkedeceğim, sanırım. –
Kesinlikle. Super() .__ init __() öğesinin alanlara erişimden önce gerçekleşmesi gerektiğini görmek önemlidir. – Brian