refactored rfid model into user, started on user save form

This commit is contained in:
Oliver Marks 2017-04-27 22:21:04 +01:00 committed by Oly
parent 66e012f994
commit 4b3f57ea7e
15 changed files with 120 additions and 112 deletions

View File

@ -7,6 +7,7 @@ from mhackspace.base.models import BannerImage
from mhackspace.feeds.models import Article, Feed
from mhackspace.users.models import User
from mhackspace.blog.models import Category, Post
from mhackspace.rfid.models import Device
class ImageFixture(AutoFixture):
@ -38,6 +39,18 @@ class Command(BaseCommand):
})
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.create(10)
self.stdout.write(

View File

@ -3,7 +3,7 @@ from django.contrib import admin
from django.contrib.admin import ModelAdmin
from django.forms.models import ModelChoiceField
from mhackspace.rfid.models import Device, Rfid, DeviceAuth
from mhackspace.rfid.models import Device, DeviceAuth
@admin.register(Device)
@ -11,11 +11,6 @@ class DeviceAdmin(ModelAdmin):
list_display = ('name', 'identifier')
@admin.register(Rfid)
class RfidAdmin(ModelAdmin):
list_display = ('code', 'description')
# Probably need to look at this again
@admin.register(DeviceAuth)
class DeviceAuthAdmin(ModelAdmin):

View File

@ -1,8 +1,7 @@
# -*- 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 django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
@ -14,7 +13,7 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('users', '0004_rfid'),
]
operations = [
@ -31,17 +30,13 @@ class Migration(migrations.Migration):
name='DeviceAuth',
fields=[
('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')),
('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)),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rfid.Device')),
('rfid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Rfid')),
],
),
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, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rfid_user', to=settings.AUTH_USER_MODEL)),
],
migrations.AddField(
model_name='device',
name='members',
field=models.ManyToManyField(through='rfid.DeviceAuth', to='users.Rfid'),
),
]

View File

@ -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',
),
]

View File

@ -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'),
),
]

View File

@ -7,25 +7,11 @@ from django.conf import settings
from django.db import models
from django.utils.translation import ugettext_lazy as _
from mhackspace.users.models import Rfid
# just brainstorming so we can start playing with this,
# 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
@ -39,11 +25,11 @@ class Device(models.Model):
members = models.ManyToManyField(Rfid, through='DeviceAuth')
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
null=True, blank=True,
# related_name='rfid_user'
)
# user = models.ForeignKey(
# settings.AUTH_USER_MODEL,
# null=True, blank=True,
# # related_name='rfid_user'
# )
def __str__(self):
return self.name

View File

@ -7,8 +7,8 @@ from test_plus.test import TestCase
from rest_framework.test import APIRequestFactory
from rest_framework.test import RequestsClient
from mhackspace.rfid.models import Device, Rfid, DeviceAuth
from mhackspace.users.models import User
from mhackspace.rfid.models import Device, DeviceAuth
from mhackspace.users.models import User, Rfid
# http://www.django-rest-framework.org/api-guide/testing/

View File

@ -2,7 +2,8 @@ import logging
from rest_framework.response import Response
from rest_framework import viewsets
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 django.core.exceptions import ObjectDoesNotExist, ValidationError

View File

@ -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 %}

View File

@ -74,6 +74,7 @@
<div class="col-sm-12">
<p>
<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>
</p>
<!-- Your Stuff: Custom user template urls -->

View File

@ -9,7 +9,7 @@ from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from django.http import HttpResponseRedirect
from django.urls import reverse
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
@ -64,3 +64,9 @@ class MyUserAdmin(AuthUserAdmin):
class MembershipAdmin(ModelAdmin):
list_display = ('user', 'payment', 'date', 'status')
list_filter = ('status',)
@admin.register(Rfid)
class RfidAdmin(ModelAdmin):
list_display = ('code', 'description')

View File

@ -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)),
],
),
]

View File

@ -90,3 +90,20 @@ class Membership(models.Model):
def __str__(self):
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

View File

@ -26,4 +26,9 @@ urlpatterns = [
view=views.UserUpdateView.as_view(),
name='update'
),
url(
regex=r'^-access-cards$',
view=views.RfidCardsUpdateView.as_view(),
name='access_cards'
),
]

View File

@ -2,10 +2,11 @@
from __future__ import absolute_import, unicode_literals
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 .models import Rfid
from .models import User
from .models import Blurb
from .models import Membership
@ -65,6 +66,18 @@ class UserUpdateView(LoginRequiredMixin, UpdateView):
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):
model = User
# These next two lines tell the view to index lookups by username