refactored rfid model into user, started on user save form
This commit is contained in:
parent
66e012f994
commit
4b3f57ea7e
|
@ -7,6 +7,7 @@ from mhackspace.base.models import BannerImage
|
||||||
from mhackspace.feeds.models import Article, Feed
|
from mhackspace.feeds.models import Article, Feed
|
||||||
from mhackspace.users.models import User
|
from mhackspace.users.models import User
|
||||||
from mhackspace.blog.models import Category, Post
|
from mhackspace.blog.models import Category, Post
|
||||||
|
from mhackspace.rfid.models import Device
|
||||||
|
|
||||||
|
|
||||||
class ImageFixture(AutoFixture):
|
class ImageFixture(AutoFixture):
|
||||||
|
@ -38,6 +39,18 @@ class Command(BaseCommand):
|
||||||
})
|
})
|
||||||
users.create(10)
|
users.create(10)
|
||||||
|
|
||||||
|
rfid = AutoFixture(Rfid)
|
||||||
|
rfid.create(20)
|
||||||
|
|
||||||
|
device = AutoFixture(Device)
|
||||||
|
device.create(5)
|
||||||
|
|
||||||
|
feed = AutoFixture(Feed)
|
||||||
|
feed.create(10)
|
||||||
|
|
||||||
|
feeds = AutoFixture(Article)
|
||||||
|
feeds.create(10)
|
||||||
|
|
||||||
banners = ImageFixture(BannerImage)
|
banners = ImageFixture(BannerImage)
|
||||||
banners.create(10)
|
banners.create(10)
|
||||||
self.stdout.write(
|
self.stdout.write(
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.contrib import admin
|
||||||
from django.contrib.admin import ModelAdmin
|
from django.contrib.admin import ModelAdmin
|
||||||
from django.forms.models import ModelChoiceField
|
from django.forms.models import ModelChoiceField
|
||||||
|
|
||||||
from mhackspace.rfid.models import Device, Rfid, DeviceAuth
|
from mhackspace.rfid.models import Device, DeviceAuth
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Device)
|
@admin.register(Device)
|
||||||
|
@ -11,11 +11,6 @@ class DeviceAdmin(ModelAdmin):
|
||||||
list_display = ('name', 'identifier')
|
list_display = ('name', 'identifier')
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Rfid)
|
|
||||||
class RfidAdmin(ModelAdmin):
|
|
||||||
list_display = ('code', 'description')
|
|
||||||
|
|
||||||
|
|
||||||
# Probably need to look at this again
|
# Probably need to look at this again
|
||||||
@admin.register(DeviceAuth)
|
@admin.register(DeviceAuth)
|
||||||
class DeviceAuthAdmin(ModelAdmin):
|
class DeviceAuthAdmin(ModelAdmin):
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by Django 1.11 on 2017-04-14 21:15
|
# Generated by Django 1.11 on 2017-04-27 18:29
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
|
@ -14,7 +13,7 @@ class Migration(migrations.Migration):
|
||||||
initial = True
|
initial = True
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
('users', '0004_rfid'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
|
@ -31,17 +30,13 @@ class Migration(migrations.Migration):
|
||||||
name='DeviceAuth',
|
name='DeviceAuth',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
('device', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='device', to='rfid.Device')),
|
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rfid.Device')),
|
||||||
('user', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_auth', to=settings.AUTH_USER_MODEL)),
|
('rfid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Rfid')),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.AddField(
|
||||||
name='Rfid',
|
model_name='device',
|
||||||
fields=[
|
name='members',
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
field=models.ManyToManyField(through='rfid.DeviceAuth', to='users.Rfid'),
|
||||||
('code', models.PositiveIntegerField()),
|
|
||||||
('description', models.CharField(blank=True, max_length=255, verbose_name='Short rfid description')),
|
|
||||||
('user', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rfid_user', to=settings.AUTH_USER_MODEL)),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11 on 2017-04-20 07:30
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
('rfid', '0001_initial'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='deviceauth',
|
|
||||||
name='device',
|
|
||||||
),
|
|
||||||
migrations.RemoveField(
|
|
||||||
model_name='deviceauth',
|
|
||||||
name='user',
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='device',
|
|
||||||
name='user',
|
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name='rfid',
|
|
||||||
name='user',
|
|
||||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
|
||||||
),
|
|
||||||
migrations.DeleteModel(
|
|
||||||
name='DeviceAuth',
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,29 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.11 on 2017-04-27 07:43
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('rfid', '0002_auto_20170420_0730'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='DeviceAuth',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rfid.Device')),
|
|
||||||
('rfid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rfid.Rfid')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='device',
|
|
||||||
name='members',
|
|
||||||
field=models.ManyToManyField(through='rfid.DeviceAuth', to='rfid.Rfid'),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -7,25 +7,11 @@ from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
from mhackspace.users.models import Rfid
|
||||||
# just brainstorming so we can start playing with this,
|
# just brainstorming so we can start playing with this,
|
||||||
# be nice to make this a 3rd party django installable app ?
|
# be nice to make this a 3rd party django installable app ?
|
||||||
|
|
||||||
|
|
||||||
# users rfid card to user mapping, user can have more than one card
|
|
||||||
class Rfid(models.Model):
|
|
||||||
code = models.PositiveIntegerField()
|
|
||||||
description = models.CharField(_('Short rfid description'), blank=True, max_length=255)
|
|
||||||
user = models.ForeignKey(
|
|
||||||
settings.AUTH_USER_MODEL,
|
|
||||||
null=True, blank=True,
|
|
||||||
# related_name='rfid_user'
|
|
||||||
)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.description
|
|
||||||
|
|
||||||
def name(self):
|
|
||||||
return self.user.name
|
|
||||||
|
|
||||||
|
|
||||||
# description of a device like door, print, laser cutter
|
# description of a device like door, print, laser cutter
|
||||||
|
@ -39,11 +25,11 @@ class Device(models.Model):
|
||||||
|
|
||||||
members = models.ManyToManyField(Rfid, through='DeviceAuth')
|
members = models.ManyToManyField(Rfid, through='DeviceAuth')
|
||||||
|
|
||||||
user = models.ForeignKey(
|
# user = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL,
|
# settings.AUTH_USER_MODEL,
|
||||||
null=True, blank=True,
|
# null=True, blank=True,
|
||||||
# related_name='rfid_user'
|
# # related_name='rfid_user'
|
||||||
)
|
# )
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
|
@ -7,8 +7,8 @@ from test_plus.test import TestCase
|
||||||
from rest_framework.test import APIRequestFactory
|
from rest_framework.test import APIRequestFactory
|
||||||
from rest_framework.test import RequestsClient
|
from rest_framework.test import RequestsClient
|
||||||
|
|
||||||
from mhackspace.rfid.models import Device, Rfid, DeviceAuth
|
from mhackspace.rfid.models import Device, DeviceAuth
|
||||||
from mhackspace.users.models import User
|
from mhackspace.users.models import User, Rfid
|
||||||
|
|
||||||
|
|
||||||
# http://www.django-rest-framework.org/api-guide/testing/
|
# http://www.django-rest-framework.org/api-guide/testing/
|
||||||
|
|
|
@ -2,7 +2,8 @@ import logging
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from mhackspace.rfid.models import Device, Rfid, DeviceAuth
|
from mhackspace.users.models import Rfid
|
||||||
|
from mhackspace.rfid.models import Device, DeviceAuth
|
||||||
from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer
|
from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer
|
||||||
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
from django.core.exceptions import ObjectDoesNotExist, ValidationError
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
|
||||||
|
{% block title %}{{ user.username }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>{{ user.username }}</h1>
|
||||||
|
<form class="form-horizontal" method="post" action="{% url 'users:update' %}" enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form|crispy }}
|
||||||
|
{{ form_blurb|crispy }}
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<button type="submit" class="btn">Update</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
|
@ -74,6 +74,7 @@
|
||||||
<div class="col-sm-12">
|
<div class="col-sm-12">
|
||||||
<p>
|
<p>
|
||||||
<a class="btn btn-primary" href="{% url 'users:update' %}" role="button">My Info</a>
|
<a class="btn btn-primary" href="{% url 'users:update' %}" role="button">My Info</a>
|
||||||
|
<a class="btn btn-primary" href="{% url 'users:access_cards' %}" role="button">My Rfid Cards</a>
|
||||||
<a class="btn btn-primary" href="{% url 'account_email' %}" role="button">E-Mail</a>
|
<a class="btn btn-primary" href="{% url 'account_email' %}" role="button">E-Mail</a>
|
||||||
</p>
|
</p>
|
||||||
<!-- Your Stuff: Custom user template urls -->
|
<!-- Your Stuff: Custom user template urls -->
|
||||||
|
|
|
@ -9,7 +9,7 @@ from django.contrib.auth.forms import UserChangeForm, UserCreationForm
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
from .models import User, Membership, MEMBERSHIP_STATUS_CHOICES
|
from .models import User, Rfid, Membership, MEMBERSHIP_STATUS_CHOICES
|
||||||
|
|
||||||
from mhackspace.subscriptions.management.commands.update_membership_status import update_subscriptions
|
from mhackspace.subscriptions.management.commands.update_membership_status import update_subscriptions
|
||||||
|
|
||||||
|
@ -64,3 +64,9 @@ class MyUserAdmin(AuthUserAdmin):
|
||||||
class MembershipAdmin(ModelAdmin):
|
class MembershipAdmin(ModelAdmin):
|
||||||
list_display = ('user', 'payment', 'date', 'status')
|
list_display = ('user', 'payment', 'date', 'status')
|
||||||
list_filter = ('status',)
|
list_filter = ('status',)
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Rfid)
|
||||||
|
class RfidAdmin(ModelAdmin):
|
||||||
|
list_display = ('code', 'description')
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11 on 2017-04-27 18:25
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0003_merge_20170226_0844'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Rfid',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('code', models.PositiveIntegerField()),
|
||||||
|
('description', models.CharField(blank=True, max_length=255, verbose_name='Short rfid description')),
|
||||||
|
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -90,3 +90,20 @@ class Membership(models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.reference
|
return self.reference
|
||||||
|
|
||||||
|
|
||||||
|
# users rfid card to user mapping, user can have more than one card
|
||||||
|
class Rfid(models.Model):
|
||||||
|
code = models.PositiveIntegerField()
|
||||||
|
description = models.CharField(_('Short rfid description'), blank=True, max_length=255)
|
||||||
|
user = models.ForeignKey(
|
||||||
|
settings.AUTH_USER_MODEL,
|
||||||
|
null=True, blank=True,
|
||||||
|
# related_name='rfid_user'
|
||||||
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.description
|
||||||
|
|
||||||
|
def name(self):
|
||||||
|
return self.user.name
|
||||||
|
|
|
@ -26,4 +26,9 @@ urlpatterns = [
|
||||||
view=views.UserUpdateView.as_view(),
|
view=views.UserUpdateView.as_view(),
|
||||||
name='update'
|
name='update'
|
||||||
),
|
),
|
||||||
|
url(
|
||||||
|
regex=r'^-access-cards$',
|
||||||
|
view=views.RfidCardsUpdateView.as_view(),
|
||||||
|
name='access_cards'
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.views.generic import DetailView, ListView, RedirectView, UpdateView
|
from django.views.generic import DetailView, ListView, RedirectView, UpdateView, CreateView
|
||||||
|
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
|
|
||||||
|
from .models import Rfid
|
||||||
from .models import User
|
from .models import User
|
||||||
from .models import Blurb
|
from .models import Blurb
|
||||||
from .models import Membership
|
from .models import Membership
|
||||||
|
@ -65,6 +66,18 @@ class UserUpdateView(LoginRequiredMixin, UpdateView):
|
||||||
|
|
||||||
return super(UserUpdateView, self).form_valid(form)
|
return super(UserUpdateView, self).form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class RfidCardsUpdateView(LoginRequiredMixin, CreateView):
|
||||||
|
fields = ['user', 'code', 'description', ]
|
||||||
|
model = Rfid
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
user = self.request.user
|
||||||
|
form.instance.user = user
|
||||||
|
return super(RfidCardsUpdateView, self).form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class UserListView(LoginRequiredMixin, ListView):
|
class UserListView(LoginRequiredMixin, ListView):
|
||||||
model = User
|
model = User
|
||||||
# These next two lines tell the view to index lookups by username
|
# These next two lines tell the view to index lookups by username
|
||||||
|
|
Loading…
Reference in New Issue