Reputation: 827
I have created a form to create an instance of my car dealer model. Now I want to be able to click on an edit icon and be taken to a page with a form that is prepopulated with the attributes of the model instance.
I'm also wondering if I need to create a separate form, view and template for creating and editing or perhaps I can reuse them somehow?
models.py
class Dealer(models.Model):
name = models.CharField(max_length=50)
phone = models.CharField(max_length=50)
website = models.CharField(max_length=100)
address = models.CharField(max_length=100)
featured_image = models.ImageField(upload_to="dealers/")
def image_tag(self):
return mark_safe('<img src="%s" style="height: 300px; width: auto;"/>' % (self.featured_image.url))
image_tag.short_description = 'Image'
class Meta:
verbose_name_plural = "Dealers"
def __str__(self):
return self.name
views.py
def create_dealer_view(request):
if request.method == "POST":
form = CreateDealerForm(request.POST, request.FILES)
if form.is_valid():
dealer = form.save(commit=False)
dealer.save()
return redirect('main:homepage_view')
else:
form = CreateDealerForm
context = {
"title": "Create - Dealer",
"form": form,
}
return render(request=request, template_name="main/create/create_dealer.html", context=context)
forms.py
class CreateDealerForm(forms.ModelForm):
class Meta:
model = Dealer
fields = ('name', 'phone','website', 'address', 'featured_image',)
widgets = {
'name': forms.TextInput(attrs={'class': 'dealer-name-field', 'placeholder': 'Dealer name'}),
'phone': forms.TextInput(attrs={'class': 'dealer-phone-field', 'placeholder': 'Dealer phone'}),
'website': forms.TextInput(attrs={'class': 'dealer-website-field', 'placeholder': 'Dealer website'}),
'address': forms.TextInput(attrs={'class': 'dealer-address-field', 'placeholder': 'Dealer address'}),
}
Upvotes: 0
Views: 382
Reputation: 3392
You just have to write an update view and its url only, can use the same form and template
def update_dealer_view(request, pk=none):
instance = get_object_or_404(Dealer, pk=pk)
form = CreateDealerForm(request.POST, request.FILES, , instance=instance)
if form.is_valid():
dealer = form.save(commit=False)
dealer.save()
return redirect('main:homepage_view')
context = {
"title": "Update - Dealer",
"form": form,
"instance=instance"
}
return render(request=request, template_name="main/create/create_dealer.html", context=context)
and make a url for this view
path('dealer/update/<int:pk>/', update_dealer_view, name='update_dealer),
Upvotes: 3