demyr
demyr

Reputation: 59

django form doesn't show up or object takes no parameters error

I would like to add a form on my website for the firms to list themselves. It's a kind of local business directory that I wanted to build up with Django. But when I try to show the form on my "add-business" page I get 2 different results.

The first result is: if I use {{ form.as_p }} it doesn't show the form.

The second result is: if I try to build the form with my own html inputs, it says object() takes no parameters, pointing at request.post within my view (form = AddBusinessForm(request.POST)) which you can see below.

I don't know what is wrong. My view is the same as the Django docs.

My Model :

class Firma(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    firm_name = models.CharField(max_length=120)
    firm_adress = models.CharField(max_length=200)
    firm_city = models.CharField(max_length=100)
    firm_desc = models.TextField(max_length=2000)
    firm_email = models.EmailField(max_length=80, unique=True,validators=[validate_email, ])
    firm_phone = models.CharField(max_length=20)
    firm_website = models.CharField(max_length=60, validators=[URLValidator()])
    firm_add_date = models.DateTimeField(auto_now_add=True)
    firm_last_edited = models.DateTimeField(auto_now=True)
    status_firm = models.CharField(max_length=40, default='Active')
    status_site = models.CharField(max_length=40, default='Pending')
    slug = models.SlugField(max_length=140, unique=True)

My Form:

class AddBusinessForm():
    firma_name = forms.CharField(max_length=80, required=True, help_text='Required.')
    firm_adress = forms.CharField(max_length=150, required=True, help_text='Required.')
    firm_city = forms.CharField(max_length=50, required=True, help_text='Required.')
    firm_desc = forms.CharField(widget=forms.Textarea, required=True, help_text='Required. About Your Company')
    firm_email = forms.EmailField(max_length=80, required=True, help_text='Required. Please write a valid email')
    firm_phone = forms.CharField(max_length=150, required=True, help_text='Required.')
    firm_website = forms.CharField(max_length=80, required=True, help_text='Required.')

    class Meta:
        model = Firma
        fields = ('firm_name', 'firm_adres','firm_city',
                 'firm_desc','firm_email','firm_telefon','firm_website')

My Url :

url(r'add-business/$',views.add_business, name='add_business'),

My View:

def add_business(request):

    if request.method == 'POST':
        form = AddBusinessForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('memberships/dashboard')
    else:
        form = AddBusinessForm()
    return render(request, 'directory/add-business.html', {'form': form})

Upvotes: 2

Views: 689

Answers (1)

Alasdair
Alasdair

Reputation: 308779

Your model form should be a subclass of forms.ModelForm:

class AddBusinessForm(forms.ModelForm):

Upvotes: 3

Related Questions