0
votes

I'm trying to create editable table in user interface and everything works till I try to insert new model argument like:

usr=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

after that getting this kind of error: django.db.utils.IntegrityError: NOT NULL constraint failed: devices_device.usr_id

I'm trying to implement this because when I save my data every user can see it. But goal is to separate users information. Maybe there is an easier way to do it.

Using django 1.11.10 version

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')

UPDATED:

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">&times;</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 %}
1

1 Answers

0
votes
def save_device_form(request, form, template_name):
    data = dict()
    if request.method == 'POST':
        if form.is_valid():
            form = form.save(commit=False) # < use these 3 below lines for save data
            form.usr = request.user
            form.save()

According to your device model that need usr also So you need to save usr as i did in my code