J'utilise Django 1.11En utilisant ModelFormMixin sans l'attribut 'champs est interdite
J'ai créé un Form
et en utilisant Class based view
pour créer un enregistrement et enregistrer la base de données.
Business/models.py
class BusinessType(models.Model):
title = models.CharField(max_length=100)
created = models.DateTimeField('date created', auto_now_add=True)
modified = models.DateTimeField('last modified', auto_now=True)
class Meta:
db_table = 'business_types'
def __str__(self):
return self.title
class Business(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
business_type = models.ForeignKey(BusinessType, on_delete=models.CASCADE)
created = models.DateTimeField('date created', auto_now_add=True)
modified = models.DateTimeField('last modified', auto_now=True)
class Meta:
verbose_name = 'business'
verbose_name_plural = 'businesses'
db_table = 'businesses'
def __str__(self):
return self.name
Business/Forms.py
class BusinessForm(ModelForm):
class Meta:
model = Business
fields = ['user']
Business/views.py
class BusinessCreate(LoginRequiredMixin, CreateView):
model = Business
form = BusinessForm
def form_valid(self, form):
messages.success(self.request, 'form is valid')
form.instance.user = self.request.user
form.save()
def get_success_url(self):
messages.success(self.request, 'Business Added Successfully')
return reverse('business:list')
En chargeant le modèle de BusinessCreate
il donne l'erreur comme
L'utilisation de ModelFormMixin (classe de base de BusinessCreate) sans l'attribut 'fields' est interdite.
Mes essais
Après avoir déménagé fields
-views class
, il fonctionne très bien. Mais je ne veux pas le faire, car je peux utiliser ce formulaire sur plusieurs vues et, par conséquent, nécessitera des modifications sur plusieurs pages à l'avenir si nécessaire.
Merci @ Daniel, j'étais coincé avec cette erreur durent une semaine –
peut vous aider un peu plus comme 'def get_success_url' n'appelle pas après l'enregistrement de l'enregistrement dans la base de données. et il donne une erreur comme 'La vue business.views.BusinessCreate n'a pas retourné un objet HttpResponse. Il a retourné None à la place. ' –
' get_success_url' est appelé par l'implémentation par défaut de 'form_valid', que vous avez surchargé. Vous devez retourner la redirection à partir de cette méthode, par exemple 'return redirect (self.get_success_url())'. Notez que l'appel 'messages.success' ne devrait pas vraiment être dans cette méthode. –