2010-06-22 14 views
14

Aynı formdaki iki tablodan tasarruf etmeye çalışıyorum - m2m ilişkisi var. Başarılı değilim, halim şu gibi bir şeyle devam ediyor: Arabirim modelini belirten ManyToManyField üzerindeki değerler ayarlanamıyor. Üyelik benim 'tablo aracılığıyla' yerine Üyelik Müdürü yerine kullanın.django Arabirim modelini belirten ManyToManyField üzerinde değerler ayarlanamaz. Use Manager yerine

kodum:

def save_classroom(request): 
    classroom_instance = Classroom() 
    if request.method == 'POST': 
     form = ClassroomForm(request.POST, request.FILES, user = request.user) 
     if form.is_valid(): 
      new_obj = form.save(commit=False) 
      new_obj.user = request.user 
      new_obj.save() 
      membership = Membership(member = request.user,classroom=new_obj) 
      membership.save() 
      form.save_m2m() 
      return HttpResponseRedirect('.')  
    else: 
      form = ClassroomForm(user = request.user)  
    return render_to_response('classroom/classroom_form.html', { 
      'form': form, 

      }, 
      context_instance=RequestContext(request)) 

benim modeller:

class Classroom(models.Model): 
    user = models.ForeignKey(User, related_name = 'classroom_creator') 
    classname = models.CharField(max_length=140, unique = True) 
    date = models.DateTimeField(auto_now=True) 
    open_class = models.BooleanField(default=True) 
    members = models.ManyToManyField(User,related_name="list of invited members", through = 'Membership') 

class Membership(models.Model): 
     accept = models.BooleanField(default=False) 
     date = models.DateTimeField(auto_now = True) 
     classroom = models.ForeignKey(Classroom, related_name = 'classroom_membership') 
     member = models.ForeignKey(User, related_name = 'user_membership') 

nerede yanılıyor muyum? görüldüğü gibi

+0

Modelleriniz: ...? –

+0

Şimdi düzenleme yapıyorum ve modelleri ekliyorum. Teşekkürler! – dana

+0

İlgili soru ORM seviyesinde bir çözüme sahiptir: http://stackoverflow.com/questions/22964448/add-for-manytomanyfield-which-specifies-an-intermediary-model – guettli

cevap

16

:

http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

Normal birçok çoğa alanlar aksine, ... [eklemek oluşturabilir veya atama (yani beatles.members = kullanamaz ]) Ben kodunuzu önceden el bir üyelik oluşturmak beri gereksiz çizgi "() form.save_m2m", üzerinde gezileri tahmin ilişkiler

oluşturun.

+0

evet. Bu problemmiş gibi görünüyor. teşekkürler! – dana

+3

Bir tablodan nasıl tasarruf edersiniz? Save() işlevinin çalışmadığı benzer bir sorunum var. – nlr25

+2

Django 1.8 kullanıyorum ve neredeyse 2 gün bekledikten sonra hiçbir şey çalışmıyor. Dokümantasyonda belirtilen tüm adımları takip ettim (https://docs.djangoproject.com/en/1.8/topics/db/models/#intermediary-manytomany). Ama hiçbir şey işe yaramadı, nihayet, M2M ilişkisini kaynak modelinden (yani sizin durumunuzdaki Classroom) kaldırmaya karar verdim ve bir ara model oluşturdum. Şimdi iyi çalışıyor, ilgili verileri kaydedip alabiliyorum. –

3

Farklı bir sorun üzerinde benzer bir hata mesajı aldım. Sadece başkalarına yardımcı olması durumunda onu buraya gönderirim.

Varolan bir modele yeni bir ManyToManyField ekledim. Bu model, exclude alanıyla oluşturulmuş ModelForm modelinde kullanılmıştır.

Yeni alanı dışlananlara eklemek için sorunu çözdüm. auto_created = True ekleyerek sorununuzu çözebilir Eğer class Membership değiştirmeye izin verilirse

28

, Django 1.7 olarak

class Membership(models.Model): 
    class Meta: 
     auto_created = True 

, hata mesajı "bir ara modelini belirleyen bir ManyToManyField değerlerini ayarlanamaz" olarak değiştirilir. Çözüm aynıdır.

NOT: Bu, ara modelinizi tamamen ve ek alanların tümünü kaldıracaktır.

+1

Bu benim için çalıştı, ancak veritabanını sıfırladıktan sonra garip bir hata oluştu: "app_membership" ilişkisi yok –

+0

"Otomatik oluşturulmuş" özniteliğini ekledikten sonra "makemigrations" yaptığımda, django kendi ara birim model sınıfımı kaldırmak istiyor . Niye ya ? – Raphael

+1

@Raphael, bana olmadı. Tamamen başka bir soru olabilir. (üzgünüm cevabım çok yardımcı olmayabilir, ama en azından hızlı bir cevap vermeyi düşündüm.) –

İlgili konular