Je reçois l'erreur suivante après avoir changé une relation ForeignKey à une relation ManyToMany. La méthode de mise à jour fonctionne-t-elle sur Many to Many?Exception lors de l'échange d'une clé ForeignKey avec ManyToMany Champ
Impossible de mettre à jour le modèle champ (seulement non les relations et les clés étrangères autorisées).
Maintenant, cela se produit dans la section d'administration lors d'une tentative de sauver modelStudent
model.This est le modèle dont le champ j'ai changé pour ManytoMany
pièce A:
class modelPatient(models.Model):
#student = models.ForeignKey(modelStudent ,null=True, blank=True) #Mutlipe Patients for single student
student = models.ManyToManyField(modelStudent,null=True,default=None,blank=True)
patient_name = models.CharField(max_length=128, unique=False)
Maintenant, ce que je avoir dans ma section admin (admin.py). Fondamentalement, le but de ce formulaire est de permettre à l'utilisateur d'assigner plusieurs étudiants à un modelPatient dans l'admin interface.I encore comme ça serait caractéristique
pièce B:
class adminStudentForm(forms.ModelForm):
class Meta:
model = modelStudent
fields = '__all__'
patients = forms.ModelMultipleChoiceField(queryset=modelPatient.objects.all())
def __init__(self, *args, **kwargs):
super(adminStudentForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['patients'].initial = self.instance.modelpatient_set.all()
def save(self, *args, **kwargs):
try:
instance = super(adminStudentForm, self).save(commit=False)
self.fields['patients'].initial.update(student=None) <-------EXCEPTION HERE
self.cleaned_data['patients'].update(student=instance)
except Exception as e:
print(e)
return instance
et ceci est l'interface enregistrée
pièce C:
class modelStudentAdmin(admin.ModelAdmin):
form = adminStudentForm
search_fields = ('first_name','user__username')
#What records to show when the model is clicked in the admin
#The super user should get everything and staff should get limited data
def get_queryset(self, request):
qs = super(modelStudentAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
else:
# Get the school instance
# Only show the students that belong to this school
schoolInstance = modelSchool.objects.get(user=request.user)
qs = modelStudent.objects.filter(school=schoolInstance)
return qs
#Limit the no. of options of Foreign Key that could be assigned
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if request.user.is_superuser:
return super(modelStudentAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
#Not superuser only staff
#Check what fields to pull out for field school
if db_field.name == 'school':
kwargs['queryset'] = modelSchool.objects.filter(user=request.user)
# Check what fields to pull out for field user
elif db_field.name == 'user':
t = modelSchool.objects.filter(user=request.user)
kwargs['queryset'] = User.objects.filter(modelschool=t)
return super(modelStudentAdmin,self).formfield_for_foreignkey(db_field, request, **kwargs)
Puis j'enregistrer le modèle comme ceci:
admin.site.register(modelStudent,modelStudentAdmin)
Bref pourquoi j'obtiens une erreur de
Impossible de mettre à jour le modèle champ (seulement non les relations et les clés étrangères autorisées).
dans mon application admin lorsque je tente de sauver le modèle puisque j'ai changé ForeignKey
à ManyToMany
suggestions de relationship.Any sur la façon dont je peux résoudre ce problème?
Avez-vous ajouté des migrations après avoir modifié le type de terrain? –
oui j'ai fait des makemigrations et j'ai migré sans aucune erreur rapportée –
Qu'est-ce que 'student = student = None'? –