Мне нужна помощь для моего проекта. Я хочу обновить и добавить дополнительный адрес в модель Address. Мне удалось обновить адрес или отредактировать адрес, но добавление дополнительного адреса, похоже, не работает. Вот моя форма HTML.
update_address.html
{% extends "livestock/livestock_base.html" %}
{% load crispy_forms_tags %}
{% block livestock%}
<div class="card-body">
<div class="row">
<div class="col-md-6 offset-3 ">
<form class="" action=" " method="POST">
{% csrf_token %}
<div class="row">
<div class="form-group col-md-8 ">
{{form.street_name | as_crispy_field}}
</div>
<div class="form-group col-md-4">
{{form.street_no | as_crispy_field}}
</div>
</div>
<div class="row">
<div class="form-group col-md-6 ">
{{form.city | as_crispy_field}}
</div>
<div class="form-group col-md-6">
{{form.state | as_crispy_field}}
</div>
</div>
<div class="form-group col">
{{form.country | as_crispy_field}}
</div>
<div class="row">
<div class="form-group col-md-6">
<input type="submit" class="btn btn-primary btn-block btn-sm" name="update" value="Update" />
</div>
<div class="form-group col-md-6">
<input type="submit" class="btn btn-primary btn-block btn-sm" name="newaddress" value="Additional Address"/>
</div>
</div>
</form>
</div>
</div>
{% endblock livestock%}
Пользователь отредактирует и обновит адрес, в противном случае он может добавить дополнительный адрес.
Вот мой views.py
def update_adress(request, id):
address = Address.objects.get(pk = id)
form = forms.AddressCreateForm(instance=address)
if request.method == 'POST' and 'update' in request.POST:
farm = Address.objects.get(pk=id)
form = forms.AddressCreateForm(request.POST, instance=farm)
*elif request.method == 'POST' and 'newaddress' in request.POST:
farm = Farms.objects.get(farm_name=address.farms)
form = forms.AddressCreateForm(request.POST, instance=farm)*
if form.is_valid():
form.save()
return redirect('view-farm-names')
context = {'form':form, 'address': address}
return render(request, "livestock/update_address.html", context)
Мой model.py выглядит следующим образом:
from django.db import models
из django .core.validators import MinValueValidator, MaxValueValidator from django .contrib.auth.models import User from datetime import datetime, date
Создайте здесь свои модели.
class Farms(models.Model):
farm_name = models.CharField(max_length=200, blank = True)
recorded_by = models.ForeignKey(User, default= None, null=True, on_delete=models.CASCADE)
def __str__(self):
return self.farm_name
COUNTRY_CHOICES = (
('Nig','Nigeria'),
('AF', 'Afghanistan'),
('AL' ,'Albania'),
('DZ' , 'Algeria'),
('AX' , 'Aland'),
('AS' , 'American'),
('AI' , 'Anguilla'),
( 'AD' , 'Andorra'),
('AO' , 'Angola'),
('AN' ,' Antilles - Netherlands'),
)
class Address(models.Model):
street_name = models.CharField(max_length = 200, blank = True)
street_no = models.CharField(max_length = 50, blank = True)
city = models.CharField(max_length = 200)
state = models.CharField(max_length = 200)
country = models.CharField(max_length = 200, choices=COUNTRY_CHOICES, default='Nig')
farms = models.ForeignKey(Farms, related_name='address', on_delete=models.CASCADE)
def __str__(self):
return self.street_name+""+self.street_no+""+self.city
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('update_adress/<int:id>/', views.update_adress, name='edit-adress'),
path('update_adress/<int:id>/', views.update_adress, name='add_new_address'),
path('update_phone/<int:id>/', views.update_phone, name='edit-phone'),
]
обновление сработало, но дополнительный адрес не работает. Я смотрел на это несколько раз, но, похоже, я никуда не пойду. Пожалуйста, помогите?