J'étudie le CBV dans django. Je veux qu'un utilisateur puisse télécharger des images sur une certaine carte d'un appartement. Ainsi, le modèle a été créé:Django. Obtenir l'identifiant de l'objet ForeignKey dans CreateView
class Photo(models.Model):
photo_path = models.ImageField(verbose_name='Фотография')
photo_user = models.ForeignKey(User, verbose_name='Агент, добавивший фото')
photo_flat = models.ForeignKey(Flat, verbose_name='Квартира')
photo_description = models.CharField(verbose_name='Описание', max_length=200, null=True, blank=True)
Les données initiales du formulaire sont photo_user et photo_flat. Lorsque j'essaie d'enregistrer une ou plusieurs images à travers un formulaire sur la page, j'ai AttributeError
.
'NoneType' object has no attribute 'pk'
Mon ModelForm ressemble à ceci:
class PhotoUploadModelForm(forms.ModelForm):
class Meta:
model = Photo
fields = ['photo_path','photo_user','photo_flat','photo_description'
Mon CreateView:
class PhotoUploadView(CreateView):
form_class = PhotoUploadModelForm
def get_initial(self):
return {'photo_user': self.request.user,
'photo_flat': self.object.pk
}
def get_success_url(self):
return reverse('ha:flatdetail')
et mon urls.py
url(r'^dev/flat/(?P<flat_id>[0-9]+)/$', views_dev.flat_ajax, name='flatdetail'),
url(r'^dev/photo-update/$', views_dev.PhotoUploadView.as_view(), name='image-update')
Je comprends l'erreur, mais n'a pas assez compétences pour le gérer. Ai-je raison de dire que self.object.pk serait l'identifiant de l'image mais pas l'appartement? Puis-je obtenir l'identifiant de l'appartement?
@Pythonista, je pense que j'essaie de faire quelque chose de stupide, Si je veux passer flat.id à 'photo_flat', je devrais peut-être inclure' flat = get_object_or_404 (Flat) 'dans' def get_initial (self) '? Mais il renvoie toute la liste des appartements que j'ai. Comment puis-je transmettre certains ID? Comme ceci: 'flat = get_object_or_404 (Flat, pk = flat_id)'? Mais cela ne fonctionne pas parce que 'get_initial' n'a pas' flat_id' –