Ссылка ForiegnKey отношения один-ко-многим - PullRequest
0 голосов
/ 25 мая 2020

Мне нужна помощь для моего проекта. Я хочу обновить и добавить дополнительный адрес в модель 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'),
]

обновление сработало, но дополнительный адрес не работает. Я смотрел на это несколько раз, но, похоже, я никуда не пойду. Пожалуйста, помогите?

...