Я пытаюсь создать редактируемую таблицу в пользовательском интерфейсе, и все работает, пока я не попытаюсь вставить новый аргумент модели, например:
usr=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
после этого появляется такая ошибка: django.db.utils.IntegrityError: Ошибка ограничения NOT NULL: devices_device.usr_id
Я пытаюсь реализовать это, потому что, когда я сохраняю свои данные, каждый пользователь может их увидеть. Но цель состоит в том, чтобы разделить информацию о пользователях. Возможно, есть более простой способ сделать это.
Использование версии 1.11.10 django
Models.py
class Device(models.Model):
usr = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
ip = models.CharField(max_length=50)
port_number = models.CharField(max_length=50)
Views.py
def save_device_form(request, form, template_name):
data = dict()
if request.method == 'POST':
if form.is_valid():
form.save()
data['form_is_valid'] = True
devices = Device.objects.all()
data['html_device_list'] = render_to_string('devices/additional/partial_devices_list.html', {
'devices': devices
})
else:
data['form_is_valid'] = False
context = {'form': form}
data['html_form'] = render_to_string(template_name, context, request=request)
return JsonResponse(data)
def device_create(request):
if request.method == 'POST':
form = DeviceForm(request.POST)
else:
form = DeviceForm()
return save_device_form(request, form, 'devices/additional/partial_device_create.html')
ОБНОВЛЕНО:
partial_device_create.html
<form method="post" action="{% url 'device_create' %}" class="js-device-create-form">
{% csrf_token %}
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title"> Create new device </h4>
</div>
<div class="modal-body">
{% include 'devices/additional/partial_device_form.html' %}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal"> Uždaryti </button>
<button type="submit" class="btn btn-primary"> Pridėti </button>
</div>
</form>
save_device_form.html
{% load widget_tweaks %}
{% for field in form %}
<div class="form-group{% if field.errors %} has-error{% endif %}">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class="form-control" %}
{% for error in field.errors %}
<p class="help-block">{{ error }}</p>
{% endfor %}
</div>
{% endfor %}
спасибо за быстрый ответ! но, к сожалению, теперь есть TypeError: объект «Устройство» не является итерируемым
....... Файл "C:\Users\lukas\Desktop\WiFi Controller\valdiklis\devices\views.py", строка 41, в device_create return save_device_form(запрос, форма, 'devices/additional/partial_device_create.html ') Файл "C:\Users\lukas\Desktop\WiFi Controller\valdiklis\devices\views.py", строка 29, в save_device_form data['html_form'] = render_to_string(template_name, context, request=request) File "C :\Users\lukas\Anaconda3\envs\env\lib\site-packages\django\template\loader.py", строка 68, в render_to_string ........
у вас проблема в коде шаблона. Шаблон render_to_string не получает объект устройства итератора