author = models.ForeignKey('auth.User', null=True, blank=False) 麻烦
author = models.ForeignKey('auth.User', null=True, blank=False) trouble
我有一个 table 用于保存数据(描述、x、y、结果和创建日期),直到现在一切正常。
然后我想为每个保存的行添加一个作者列,例如:
DES| × |是 |结果 |创建日期|作者 |
hi | 3| 1 | 4 | 24/02/2015 | username |
然后我在 models.py 中添加了 auth:
from django.db import models
from django.utils import timezone
from simpleapp.oper import add_divide
from django.conf import settings
class ElementiTab(models.Model):
author = models.ForeignKey('auth.User', null=True, blank=False)
des = models.CharField(max_length=30)
x = models.FloatField()
y = models.FloatField()
res = models.FloatField(default=0)
created_date = models.DateTimeField(default=timezone.now)
def save(self, *args, **kwargs):
self.res = add_divide(self.x, self.y)
super(ElementiTab, self).save(*args, **kwargs)
def __str__(self):
return self.des
更新:
forms.py
from django import forms
from .models import ElementiTab
class ElementiTabForm(forms.ModelForm):
class Meta:
model = ElementiTab
fields = ('des', 'x', 'y')
views.py
@login_required
def tabval(request):
# if this is a POST request we need to process the form data
valori = ElementiTab.objects.filter().order_by('-created_date')
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = ElementiTabForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
form.save()
# if a GET (or any other method) we'll create a blank form
else:
form = ElementiTabForm()
return render(request, 'simpleapp/simpleapp.html', {'form': form, 'valori': valori})
@user_passes_test(lambda u: u.is_superuser)
def delete(request, id):
valori_to_delete = get_object_or_404(ElementiTab, pk=id).delete()
return redirect(tabval)
simpleapp.html
{% extends 'registration/base_reg.html' %}
{% block title %}SimpleApp-tabval{% endblock %}
{%block content%}
<h4>TABELLA CON DATI</h4>
<form action="/simpleapp/" method="post">
{% csrf_token %}
{{ form.as_table }}
<input type="submit" value="LIST" />
</form>
<form action="/simpleapp/" method="DELETE">
{% csrf_token %}
<input type="submit" name="canc" value="RESET" />
</form>
<br />
<br />
<div class="table-responsive">
<table class="table table-bordered">
<tr class="info">
<td width="15%" align="center"> NOME</td>
<td width="15%" align="center"> X </td>
<td width="15%" align="center"> Y </td>
<td width="15%" align="center"> RISULTATO </td>
<td width="15%" align="center"> DATA CREAZIONE </td>
<td width="15%" align="center"> AUTORE </td>
{% for elementi in valori %}
<div class="elementi">
<tr>
<td>{{elementi.des}}</td>
<td>{{elementi.x}}</td>
<td>{{elementi.y}}</td>
<td>{{elementi.res}}</td>
<td>{{elementi.created_date}}</td>
<td>{{elementi.author}}</td>
<td width="1%">
{% if user.is_superuser %}
<a href="/delete/{{elementi.id}}" class="btn btn-danger" role="button">Delete</a>
{% else %}
<a href="" class="btn btn-danger disabled" role="button"><span style='font-size: small'>Only Admin</span></a>
{% endif %}
</td>
</div>
{% endfor %}
</table>
</div>
{% endblock content %}
事实上,管理页面显示了一个下拉菜单,我(作为管理员)可以从中选择其中一个注册用户,所以我将他们都添加到table 我的应用程序和数据库。
如何使这个过程自动进行? IE。登录后,将数据放在table中,保存数据后,用户名也被保存,不应由管理员设置。
我在这里搜索了一个类似的问题,但没有找到可以帮助我解决问题的问题。
我更新了我的回答,我误解了你的问题。
改变你的观点
if form.is_valid():
# Creating the object without commiting to database
obj = form.save(commit=False)
# Setting the user from request
obj.author = request.user
# Commiting to the database
obj.save()
我有一个 table 用于保存数据(描述、x、y、结果和创建日期),直到现在一切正常。 然后我想为每个保存的行添加一个作者列,例如:
DES| × |是 |结果 |创建日期|作者 |
hi | 3| 1 | 4 | 24/02/2015 | username |
然后我在 models.py 中添加了 auth:
from django.db import models from django.utils import timezone from simpleapp.oper import add_divide from django.conf import settings class ElementiTab(models.Model): author = models.ForeignKey('auth.User', null=True, blank=False) des = models.CharField(max_length=30) x = models.FloatField() y = models.FloatField() res = models.FloatField(default=0) created_date = models.DateTimeField(default=timezone.now) def save(self, *args, **kwargs): self.res = add_divide(self.x, self.y) super(ElementiTab, self).save(*args, **kwargs) def __str__(self): return self.des
更新:
forms.py
from django import forms
from .models import ElementiTab
class ElementiTabForm(forms.ModelForm):
class Meta:
model = ElementiTab
fields = ('des', 'x', 'y')
views.py
@login_required
def tabval(request):
# if this is a POST request we need to process the form data
valori = ElementiTab.objects.filter().order_by('-created_date')
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = ElementiTabForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
form.save()
# if a GET (or any other method) we'll create a blank form
else:
form = ElementiTabForm()
return render(request, 'simpleapp/simpleapp.html', {'form': form, 'valori': valori})
@user_passes_test(lambda u: u.is_superuser)
def delete(request, id):
valori_to_delete = get_object_or_404(ElementiTab, pk=id).delete()
return redirect(tabval)
simpleapp.html
{% extends 'registration/base_reg.html' %}
{% block title %}SimpleApp-tabval{% endblock %}
{%block content%}
<h4>TABELLA CON DATI</h4>
<form action="/simpleapp/" method="post">
{% csrf_token %}
{{ form.as_table }}
<input type="submit" value="LIST" />
</form>
<form action="/simpleapp/" method="DELETE">
{% csrf_token %}
<input type="submit" name="canc" value="RESET" />
</form>
<br />
<br />
<div class="table-responsive">
<table class="table table-bordered">
<tr class="info">
<td width="15%" align="center"> NOME</td>
<td width="15%" align="center"> X </td>
<td width="15%" align="center"> Y </td>
<td width="15%" align="center"> RISULTATO </td>
<td width="15%" align="center"> DATA CREAZIONE </td>
<td width="15%" align="center"> AUTORE </td>
{% for elementi in valori %}
<div class="elementi">
<tr>
<td>{{elementi.des}}</td>
<td>{{elementi.x}}</td>
<td>{{elementi.y}}</td>
<td>{{elementi.res}}</td>
<td>{{elementi.created_date}}</td>
<td>{{elementi.author}}</td>
<td width="1%">
{% if user.is_superuser %}
<a href="/delete/{{elementi.id}}" class="btn btn-danger" role="button">Delete</a>
{% else %}
<a href="" class="btn btn-danger disabled" role="button"><span style='font-size: small'>Only Admin</span></a>
{% endif %}
</td>
</div>
{% endfor %}
</table>
</div>
{% endblock content %}
事实上,管理页面显示了一个下拉菜单,我(作为管理员)可以从中选择其中一个注册用户,所以我将他们都添加到table 我的应用程序和数据库。
如何使这个过程自动进行? IE。登录后,将数据放在table中,保存数据后,用户名也被保存,不应由管理员设置。
我在这里搜索了一个类似的问题,但没有找到可以帮助我解决问题的问题。
我更新了我的回答,我误解了你的问题。
改变你的观点
if form.is_valid():
# Creating the object without commiting to database
obj = form.save(commit=False)
# Setting the user from request
obj.author = request.user
# Commiting to the database
obj.save()