2009-02-27 14 views
1
class Person(models.Model): 
    name = models.CharField(max_length=100) 

class Entry(models.Model): 
    text = models.CharField(max_length=100) 
    person = models.ManyToManyField(Person, blank=True, null=True) 

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = Entry 

Görüşüme göre, pk kimliklerini kaydetmeden önce gönderilen bir forma eklemem gerekiyor.Görünüm içinde bir modelin çoktan çoğa alanına veri ekleme

data = request.POST.copy() 
# 'person' is a ManyToManyField to a 'Person' model 
# a form would normally send multiple id's as POST in this format -> u'id': [u'1', u'2'] 
# u'1,2' (an example) is a str variable accessible to the view 
data[u'person'] = u'1,2'.split(",") 
form = MyModelForm(data) 
if form.is_valid(): 
    form.save() 

Bu bana verir: Yeterince adil

int() argument must be a string or a number, not 'list'

. Ben de hiçbir başarı ile denedim

data[u'person'] = u'1' 

:

Nasıl bu ManyToManyField için birden kimliklerini kaydedebilir Bu durumda çalışır?
Kolay olmalı ama noktayı kaçırıyorum.


DÜZENLEME: arzu edilen sonuç ('entry_person' tablosundaki birden çok kaydı) form.person için saklanan tüm kimliği ile 'MyModelForm biri yeni bir örneği ('giriş' tablosundaki) olan .


GÜNCELLEME: Sorunu izole gibi görünüyor.

Yaparsam:

data = {} 
data[u'person'] = u'1,2'.split(",") 

O sonucunda çalışma olduğunu mu :

{u'person': [u'1', u'2'],} 

Yaparsam:

data = request.POST.copy() 
data[u'person'] = u'1,2'.split(",") 

O ( değil iş sonuç olarak yukarıda açıklanan hatayı verir) :

<QueryDict: {u'person': [[u'1', u'2']],}> 

Yani tek ihtiyacım nasıl

<QueryDict: {u'person': [u'1', u'2'],}> 

Herhangi öneri sahip olmaktır?

[u'1', u'2'] 

veritabanınızda birden çok örneğini oluşturmak için size liste yineleme gerekir:: için meraktan

for x in u'1,2'.split(","): 
    data[u'person'] = x 
    form = MyModelForm(data) 
    if form.is_valid(): 
    form.save() 

, neden dize

+0

Cevaplanarak? –

+0

Teşekkürler! Bu garip ama bence sorunun nedenini buldum. – dmi

cevap

0

bölünmüş aşağıdaki getiri girmiş İlk etapta liste dönüşümü mü? Ya da bu sadece genel bir örnektir

+0

Teşekkür ederiz! Bu, n = n = öğedeki öğe sayısı olan MyModelForm'un (her biri için 'kişiden' = for döngüsünden olan) n kayıtlarını oluşturur. İhtiyacım olan şey bir MyModelForm kaydı oluşturmak ve n kimliğinin 'kişi' için saklanmasıdır. – dmi

0

Dene:

new_form.person = [int(x) for x in u'1,2'.split(",")] 

Bu ints listesi, dizeleri değil bir listeye new_form.person ayarlayacaktır.Bu sorunu giderir.

+0

Teşekkürler! Bu çalışmıyor. TypeError: int() argümanı bir dize veya sayı olmalı, 'liste' değil – dmi

İlgili konular