Django模型为每个用户存储信息



我正在建立一个竞赛网站,每周都会发布挑战。对于每个用户,我想跟踪他们是否完成了挑战,但看不到如何完成。目前,挑战被存储为一个模型,我使用ListView和DetailView来显示它们。

from django.db import models
from django.contrib.auth.models import User
STATUS = (
(0, 'Draft'),
(1, 'Publish'),
)
class Challenge(models.Model):
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200, unique=True)
release_date = models.DateTimeField()
preamble = models.TextField()
ciphertext = models.TextField()
plaintext = models.TextField()
status = models.IntegerField(choices=STATUS, default=0)
class Meta:
ordering = ['-release_date']
def __str__(self):
return self.title

提前感谢任何帮助我的人。哦,我们会提交一份解决方案,然后用这份表格进行检查。

<div class='form'>
{% if user.is_authenticated %}
<textarea rows="10" name="plaintext" form="submitAnswer" wrap="soft" placeholder="Plaintext.."></textarea>
<form method="post" id="submitAnswer">
{% csrf_token %}
<input type="submit" value="Submit">
</form>
{% else %}
<p>Must be logged in to submit answer.</p>
{% endif %}
</div>

一个真正基本的实现是在Challenge模型和User模型之间添加一个ManyToManyField:

from django.conf import settings
class Challenge(models.Model):
users = models.ManyToManyField(settings.AUTH_USER_MODEL)
# Other fields...

在上面的例子中,如果用户通过了测试,您就可以激活关系。

现在,也许,你想添加关于这段关系的信息。您可以使用"through"参数来完成此操作。该模型告诉用户是否通过了挑战,以及完成了多少次尝试。根据需要进行修改。

from django.conf import settings
class Challenge(models.Model):
users = models.ManyToManyField(settings.AUTH_USER_MODEL,
through='ChallengeUsers')
# Other fields...
class ChallengeUsers(models.Model):
challenge = models.ForeignKey(Challenge, on_delete=models.CASCADE)
users = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
hasPassed = models.BooleanField(default=False)
tentatives = models.IntegerField()

最新更新