私はモデルのカップルを持っていて、そのうちの1つはdjango adminを拡張しているユーザーモデルの外部キーです。私はログイン時に自分のセッションに所属するものを表示したい。私は、この認証を定義して、特定のユーザーがデータベース内に存在するかどうかをチェックし、インスタンスとのセッションにリダイレクトします。djangoはそのポータルにログインしています
def auth_view(request):
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return HttpResponseRedirect('/studentloggedin/')
学生はまた、ユーザ・ログへの外部キーである一方、基本的には、登録は、最初のモデルと学生モデルへの外部キーです。 UserLogはデフォルトのdjango adminを拡張しています。ここでログインしたセッションを、ログイン時に個々のユーザーの詳細を除外するために定義しました。
def studentloggedin(request):
registration = Registration.objects.all()
students = Student.objects.filter(registration=registration)
alluser = UserLog.objects.filter(student=students)
context = {
'registration': registration,
'students': students,
'alluser': alluser,
}
return render(request, "studentloggedin.html", context)
ここに、ログイン時の情報を表示するテンプレートがあります。
<img
{% for student in students %}
src="{{ student.student_photo.url }}">
<p>{{ student.previous_school }}</p>
{% endfor %}
しかし、私は以下のエラーを取得しています:だけ追加して考え表現
として使用サブクエリから返された1行より
以上/ studentloggedin /時
ProgrammingErrorをあなたの熟読のためのモデル。
class Registration(models.Model):
lastName = models.CharField(
_('Last Name'),
max_length=30,
null=False,
blank=False
)
middleName = models.CharField(
_('Middle Name'),
max_length=30,
null=True,
blank=True
)
firstName = models.CharField(
_('First Name'),
max_length=30,
null=False,
blank=False
)
gender = models.CharField(
_('Gender'),
max_length=30,
choices=GENDER_CHOICES,
default=u' ',
null=False,
blank=False
)
grade = models.CharField(
_('Class'),
max_length=30,
choices=CLASS_CHOICES,
default=u' ',
null=False,
blank=False
)
phone_regex = RegexValidator(
regex=r'^\+?1?\d{9,15}$',
message="Phone number format: '+999999999'. Up to 15 digits allowed."
)
phone_number = models.CharField(
_('Phone Number'),
max_length=255,
validators=[phone_regex],
blank=True
)
email = models.EmailField(
_('Email Address'),
max_length=254,
null=True,
blank=True
)
address = models.CharField(
_('Address'),
max_length=255,
null=False,
blank=False
)
city = models.CharField(
_('City'),
max_length=30,
null=False,
blank=False
)
county = models.CharField(
_('County'),
max_length=30,
choices=COUNTY_CHOICES,
default=None,
null=False,
blank=False
)
nationality = models.CharField(
_('Nationality'),
max_length=30,
null=False,
blank=False
)
dateOfBirth = models.DateField(
_('Date of Birth'),
max_length=30,
null=False,
blank=False
)
placeOfBirth = models.CharField(
_('Place of Birth'),
max_length=255,
null=False,
blank=False
)
regDate = models.DateField(
_('Registration Date'),
max_length=30,
null=False,
blank=False
)
country = models.CharField(
_('Country'),
max_length=255,
null=False,
blank=False
)
emergency = models.CharField(
_('Emergency Contact'),
max_length=255,
null=True,
blank=True
)
emergency_phone = models.CharField(
_('Phone (Emergency Contact)'),
max_length=255,
validators=[phone_regex],
blank=True
)
transcript = models.FileField(
_('Transcript'),
max_length=255,
null=True,
blank=True
)
created = models.DateTimeField(
_('Date Created'),
auto_now=True,
null=True,
blank=True
)
modified = models.DateTimeField(
_('Date Modified'),
auto_now_add=True,
null=False,
blank=False
)
def __str__(self):
return self.firstName
def age(self):
import datetime
return int((datetime.date.today() - self.dateOfBirth).days/365.25)
def upload_location(instance, filename):
return "%s/%s" % (instance.id, filename)
class Student(models.Model):
import datetime
YEAR_CHOICES = []
for r in range(1980, (datetime.datetime.now().year+1)):
YEAR_CHOICES.append((r, r))
studentID = models.CharField(
_('Student ID'),
max_length=30,
blank=True,
default=''
)
registration = models.ForeignKey(
Registration
)
student_photo = models.ImageField(
_('Picture'),
max_length=255,
null=False,
blank=False,
upload_to=upload_location
)
previous_school = models.CharField(
_('Previous School Attended'),
max_length=255,
null=False,
blank=False
)
previous_school_address = models.CharField(
_('Previous School Address'),
max_length=255,
null=False,
blank=False
)
last_year_attendance = models.IntegerField(
_('Last Year of Attendance'),
choices=YEAR_CHOICES,
default=datetime.datetime.now().year
)
level = models.CharField(
_('Level'),
max_length=255,
choices=LEVEL_CHOICES,
default=None,
null=False,
blank=False
)
enrollment_status = models.CharField(
_('Enrollment Status'),
max_length=255,
choices=ENROLLMENT_CHOICES,
default=None,
null=False,
blank=False
)
enrollment_Date = models.DateField(
_('Enrollment Date'),
max_length=30,
null=False,
blank=False
)
created = models.DateTimeField(
_('Date Created'),
auto_now=True,
null=True,
blank=True
)
modified = models.DateTimeField(
_('Date Modified'),
auto_now_add=True,
null=False,
blank=False
)
class Meta:
ordering = ["-id"]
def __str__(self):
return self.studentID
def save(self, force_insert=False, force_update=False):
if self.studentID == "":
existing_studentIDs = Student.objects.all().order_by('-studentID')
if existing_studentIDs.count() > 0:
new_code = int(existing_studentIDs[0].studentID[1:]) + 1
else:
new_code = 0
self.studentID = 'S%03d' % new_code
super(Student, self).save(force_insert, force_update)
class UserLog(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
student = models.ForeignKey(
Student,
null=True,
blank=True,
default=None
)
staff = models.ForeignKey(
Staff,
null=True,
blank=True,
default=None
)
parent = models.ForeignKey(
Parent,
null=True,
blank=True,
default=None
)
あなたは 'python manage.py makemigrations'と' python manage.py migrate'を実行しましたか? – ettanany
はい@ettanany、私はそれらのコマンドを実行し、すべてが管理者のログインからうまくいくようです。私はユーザーにログインし、どのような詳細がそれらに属しているかを照会しようとしています。 –
あなたのモデルを表示できますか? – ettanany