Django 1.11升起forms.validationError表格.validationError不显示htm中的错误

2024-10-16 22:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试过寻找如何检查数据库中是否已经存在表单名称的解决方案。我使用了this link来解决这个问题,它确实不允许输入重复的名称。但在我期望的地方,我没有收到错误消息。我不知道我做错了什么,所以如果有人能告诉我该怎么做,那将是非常有用的!在

在添加游戏.html公司名称:

<form method="POST" class="post-form" enctype="multipart/form-data">
          {% csrf_token %}
          {% if form.non_field_errors %}
              {% for error in form.non_field_errors %}
                {{ error }}
              {% endfor %}
          {% endif %}
          <div class="form-group">
            {{ form.name.label_tag }}
            {% render_field form.name class="form-control" %}
            <br>
            {{ form.genre.label_tag }}
            {% render_field form.genre class="form-control" %}
            <br>
            {{ form.image.label_tag }}
            {{ form.image }}
          </div>
          <hr>
          <button type="submit" class="save btn btn-primary">Save</button>
        </form>

在视图.py公司名称:

^{pr2}$

在表单.py公司名称:

class InfoForm(forms.ModelForm):

class Meta:
    model = GameInfo
    fields = ('name', 'image', 'genre')

def clean_name(self):
    name = self.cleaned_data['name']
    try:
        match = GameInfo.objects.get(name=name)
    except GameInfo.DoesNotExist:
        return name
    raise forms.ValidationError('This game has already been added to the list.')

不确定是否需要,所以我会发帖模型.py以及:

class GameInfo(models.Model):
GAME_CHOICE = [
    ("BMU", "Beat 'em up"),
    ("FT", "Fighting"),
    ("PF", "Platform"),
    ("FPS", "Shooter"),
    ("SV", "Survival"),
    ("ST", "Stealth"),
    ("AA", "Action Adventure"),
    ("EX", "Exploring"),
    ("SH", "Survival horror"),
    ("IF", "Interactive fiction"),
    ("IM", "Interactive movie"),
    ("VN", "Visual novel"),
    ("ARP", "Action role-playing"),
    ("JRP", "Japanese role-playing"),
    ("TRP", "Tactical role-playing"),
    ("CAM", "Construction and management"),
    ("LS", "Life simulation"),
    ("SP", "Sports"),
    ("VH", "Vehicle"),
    ("MOBA", "Multiplayer online battle arena"),
    ("RTS", "Real-time strategy"),
    ("RTT", "Real-time tactics"),
    ("TBS", "Turn-based strategy"),
    ("TBT", "Turn-based tactics"),
    ("MMORPG", "MMORPG"),
    ("MMOFPS", "MMO-FPS"),
    ("MMOR", "MMO Racing"),
    ("CG", "Cardgame"),
    ("PAC", "Point and Click"),
    ("MG", "Music Game"),
    ("VR", "Virtual Reality"),
    ("RC", "Racing"),
]
name = models.CharField(max_length=100)
created_date = models.DateTimeField(default=timezone.now)
image = models.ImageField(upload_to='./media/images/')
genre = models.CharField(
    max_length=6,
    choices=GAME_CHOICE,
    default="BMU",
)

def __str__(self):
    return self.name

class Meta:
    ordering = ('name',)

Tags: namepyimageselfform名称fieldmodels