まずER図とデータ型を編集しながらmodels.pyを作成します。
/sales/models.py
class Clients(models.Model): name = models.CharField(max_length=255) name_kana = models.CharField(max_length=255, null=True) office = models.CharField(max_length=255, null=True) department = models.CharField(max_length=255, null=True) position = models.CharField(max_length=255, null=True) charge = models.CharField(max_length=255) charge_mail = models.EmailField(max_length=255) zipcode = models.CharField(max_length=8, validators=[RegexValidator(r"\d{3}-\d{4}")]) prefecture = models.CharField(max_length=20) address = models.CharField(max_length=255) tel = models.CharField(max_length=15) fax = models.CharField(max_length=15, null=True) name_top = models.CharField(max_length=255) position_top = models.CharField(max_length=100, null=True) remark = models.TextField(max_length=300, null=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
$ python manage.py makemigrations sales
$ python manage.py migrate
mysql> show tables;
mysql> describe sales_clients;
+————–+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————–+————–+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| name_kana | varchar(255) | YES | | NULL | |
| office | varchar(255) | YES | | NULL | |
| department | varchar(255) | YES | | NULL | |
| position | varchar(255) | YES | | NULL | |
| charge | varchar(255) | NO | | NULL | |
| charge_mail | varchar(255) | NO | | NULL | |
| zipcode | varchar(8) | NO | | NULL | |
| prefecture | varchar(20) | NO | | NULL | |
| address | varchar(255) | NO | | NULL | |
| tel | varchar(15) | NO | | NULL | |
| fax | varchar(15) | YES | | NULL | |
| name_top | varchar(255) | NO | | NULL | |
| position_top | varchar(100) | YES | | NULL | |
| remark | longtext | YES | | NULL | |
| created_at | datetime(6) | NO | | NULL | |
| updated_at | datetime(6) | NO | | NULL | |
+————–+————–+——+—–+———+—————-+
18 rows in set (0.00 sec)
/sales/forms.py
class ClientsForm(forms.ModelForm): class Meta: model = Clients fields = ['name', 'name_kana', 'office', 'department', 'position', 'charge', 'charge_mail', 'zipcode', 'prefecture', 'address', 'tel', 'fax', 'name_top', 'position_top', 'remark']
/sales/views.py
from .models import Clients form .forms import ClientsForms def client_complete(request): if(request.method == 'POST'): name = request.POST['name'] name_kana = request.POST['name_kana'] office = request.POST['office'] department = request.POST['department'] position = request.POST['position'] charge = request.POST['charge'] charge_mail = request.POST['charge_mail'] zipcode = request.POST['zipcode'] prefecture = request.POST['prefecture'] address = request.POST['address'] tel = request.POST['tel'] fax = request.POST['fax'] name_top = request.POST['name_top'] position_top = request.POST['position_top'] remark = request.POST['remark'] clients = Clients(name=name, name_kana=name_kana, office=office, department=department, position=position, charge=charge, charge_mail=charge_mail, zipcode=zipcode, prefecture=prefecture, address=address, tel=tel,fax=fax, name_top=name_top, position_top=position_top, remark=remark) clients.save() return render(request, 'sales/client_complete.html') def client_input(request): params = { 'form': ClientsForm() } return render(request, 'sales/client_input.html', params)
/templates/sales/client_input.html
// 省略
-> django-widdget-tweaksではTextFieldは自動的にtextareaになるが、rowsを指定してあげる
{% render_field form.remark class="form-control" rows="2" placeholder="" %}
mysql> select * from sales_clients;
+—-+——————————————–+——————————–+——–+————+—————–+————–+————————-+———-+————+——————————-+————–+————–+————–+—————–+——————–+—————————-+—————————-+
| id | name | name_kana | office | department | position | charge | charge_mail | zipcode | prefecture | address | tel | fax | name_top | position_top | remark | created_at | updated_at |
+—-+——————————————–+——————————–+——–+————+—————–+————–+————————-+———-+————+——————————-+————–+————–+————–+—————–+——————–+—————————-+—————————-+
| 1 | ジャパンソフトウェア株式会社 | ジャパンソフトウェア | 本社 | 営業部 | 代表取締役 | 佐藤太郎 | staro@japansoftware.com | 100-0002 | 東京都 | 千代田区皇居外苑1-2-3 | 03-1234-5678 | 03-1234-5679 | 山本五郎 | 代表取締役 | | 2020-08-30 02:09:35.555187 | 2020-08-30 02:09:35.555259 |
| 2 | アジアテック株式会社 | アジアテック | 本社 | 営業部 | 課長 | 山本太郎 | yamamoto@asiatech.com | 100-0002 | 東京都 | 千代田区皇居外苑1-2-3 | 03-1234-5678 | 03-1234-5679 | 山田一郎 | 代表取締役 | 佐藤氏の紹介 | 2020-08-30 02:54:20.407693 | 2020-08-30 02:54:20.407756 |
+—-+——————————————–+——————————–+——–+————+—————–+————–+————————-+———-+————+——————————-+————–+————–+————–+—————–+——————–+—————————-+—————————-+
2 rows in set (0.00 sec)
zipcodeのバリデーションを\d{3}-\d{4}として、会社名カナのバリデーションを\u30A1-\u30F4とした場合に、form.is_valid():として複数のエラーメッセージを出し分ける方法がわからんな。