لا يمكن لـ Django تعيين القيم على ManyTomanyfield التي تحدد نموذجًا وسيطًا. استخدم المدير بدلاً من ذلك

StackOverflow https://stackoverflow.com/questions/3091328

  •  29-09-2019
  •  | 
  •  

سؤال

أنا أعمل على توفير نفس الجدولين - مع وجود علاقة M2M. لا أنجح ، فإن خطأي يستمر بشيء مثل: لا يمكن تعيين القيم على ملعب ManyTomany الذي يحدد نموذجًا وسيطًا. استخدم مدير العضوية بدلاً من ذلك حيث تكون العضوية "من خلال الجدول".

رمز بلدي :

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))  

نماذج بلدي:

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')

أين أنا مخطئ؟

هل كانت مفيدة؟

المحلول

كما شوهد على:

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

على عكس الحقول العادية للعديد من الأشياء ، لا يمكنك استخدام إضافة أو إنشاء أو مهمة (أي ، Beatles.mebers = [...]) لإنشاء علاقات

أعتقد أن الرمز الخاص بك يتجول على السطر "form.save_m2m ()" ، وهو أمر غير ضروري لأنك بالفعل إنشاء عضوية يدويًا.

نصائح أخرى

إذا سمح لك بالتعديل class Membership, مضيفا auto_created = True قد تحل مشكلتك ،

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

في Django 1.7 ، يتم تغيير رسالة الخطأ إلى "لا يمكن تعيين القيم على ManyTomanyfield التي تحدد نموذجًا وسيطًا". الحل هو نفسه.

ملاحظة: سيؤدي ذلك إلى إزالة النموذج الوسيط بالكامل ، وجميع الحقول الإضافية معه.

كان لدي رسالة خطأ مماثلة في مشكلة مختلفة. أنشرها هنا فقط في حال يساعد الآخرين.

لقد أضفت جديدة ManyToManyField على نموذج موجود. تم استخدام هذا النموذج في أ ModelForm بنيت مع exclude مجال.

لقد أصلحت المشكلة عن طريق إضافة الحقل الجديد في الحقل المستبعد.

اعتبارا من Django 2.2 إصدار يمكنك أيضًا تحديد أ through_defaults في الحقل من أجل استخدام إضافة وإنشاء وتخصيص:

ال RelatedManager.add(), create(), remove(), set(), get_or_create()، و update_or_create() يُسمح الآن بالأساليب في العلاقات العديدة إلى العدد مع النماذج المتوسطة. الجديد through_defaultsيتم استخدام الوسيطة لتحديد قيم مثيل (أماكن) النموذج الوسيط الجديد.

في حالتك نظرًا لأن جميع الحقول لديها بالفعل افتراضات قد تعمل في 2.2.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top