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
Cevaplanarak? –
Teşekkürler! Bu garip ama bence sorunun nedenini buldum. – dmi