Eğer forms.ModelChoiceField
kullanmak ve bunu bir Sorgu Kümesi geçebilir, formda bir yabancı anahtar alanını göstererek getirmedi. böylece
, forms.py:
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
def __init__(self, *args, **kwargs):
user = kwargs.pop('user','')
super(DocumentForm, self).__init__(*args, **kwargs)
self.fields['user_defined_code']=forms.ModelChoiceField(queryset=UserDefinedCode.objects.filter(owner=user))
views.py: Sorunuza dan
def someview(request):
if request.method=='post':
form=DocumentForm(request.POST, user=request.user)
if form.is_valid():
selected_user_defined_code = form.cleaned_data.get('user_defined_code')
#do stuff here
else:
form=DocumentForm(user=request.user)
context = { 'form':form, }
return render_to_response('sometemplate.html', context,
context_instance=RequestContext(request))
: Ben kullanabileceğiniz bir görünümde biliyorum
document.code_set (örneğin) için geçerli belge nesnesine ilgili nesnelere erişebilir, ancak ben değil, bu ModelForm'a nasıl uygulanacağından emin değilsiniz. FK ilişki belgeleriniz modelinde tanımlanmış olduğundan
Aslında,
Document
nesneleri
.code_set
olmazdı.
Code
'a çoktan bire bir ilişki tanımlamakta, yani
Code
nesnesinde
Document
nesnesi olabileceği anlamına gelir.
Code
nesneleriniz
.document_set
olur. Belge nesnesinden yapabilecekleriniz,
Code
'un
document.code
kullanarak ilişkili olduğu erişimdir.
düzenleme: Bu sizin aradığınız şeyi yapacağını düşünüyorum. (Denenmemiş)
forms.py:
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
exclude = ('code',)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user','')
super(DocumentForm, self).__init__(*args, **kwargs)
self.fields['user_defined_code']=forms.ModelChoiceField(queryset=UserDefinedCode.objects.filter(owner=user))
self.fields['unique_code']=forms.CharField(max_length=15)
views.py:
def someview(request):
if request.method=='post':
form=DocumentForm(request.POST, user=request.user)
if form.is_valid():
uniquecode = form.cleaned_data.get('unique_code')
user_defined_code = form.cleaned_data.get('user_defined_code')
doc_code = Code(user_defined_code=user_defined_code, code=uniquecode)
doc_code.save()
doc = form.save(commit=False)
doc.code = doc_code
doc.save()
return HttpResponse('success')
else:
form=DocumentForm(user=request.user)
context = { 'form':form, }
return render_to_response('sometemplate.html', context,
context_instance=RequestContext(request))
aslında muhtemelen bunun yerine sizin Kod nesnesi oluştururken get_or_create kullanmak istiyorum.
doc_code = Code(user_defined_code=user_defined_code, code=uniquecode)
Yardımlarınız için teşekkürler.ModelChoiceField için belgeleri okudum ve şimdi mantıklı. 'Unique_code' alanı için CharField'ı (sorgumun üçüncü kurşunu) nasıl görüntüleyeceğimi biliyor musunuz? Modellerimi okumayı kolaylaştırmak için birazcık inceledim, ancak temelde bilgisayar tarafından oluşturulan benzersiz bir belge kodu atanmış bir belgem var. Her kullanıcı, sahip oldukları tüm belgeler için belge koduna bir önek olarak eklenmiş ayrı bir kullanıcı kodu oluşturabilir, dolayısıyla çoklu modellerin nedeni. –
@Ben S Tamam bir bakayım. Mesajımı düzenlerim. – DTing
Bu harika çalıştı. Yardım ettiğin için teşekkür ederim. –