【问题标题】:Updating a Django Model from DetailView从 DetailView 更新 Django 模型
【发布时间】:2020-06-01 21:37:09
【问题描述】:

我有一个 Django 模型,它从用户 1 使用 CreateView 创建的表单接收大部分变量值。用户 1 创建一个对象并选择大多数字段值。

创建对象后,将其张贴到墙上,另一个用户(用户 2)可以访问该对象并为最终未填充的字段添加信息。我的问题是,如何在 DetailView html 表单中允许此功能?在下面的代码中,“basketball.salary2”是用户 2 将在 DetailView 中输入和发布的先前空字段。所有其他值都已填写并显示在 HTML 中。

basketball_detail.html:

{% extends "base.html" %}

{% block title %}By: {{ basketball.creator }}{% endblock %}

{% block content %}

<h2>{{ basketball.creator }} has placed an opinion:</h2>
<p>{{ basketball.creator }} says that {{ basketball.player }} deserves 
  {{ basketball.salary1 }} 

<p> Do you agree with {{ basketball.creator }}? </p>

<p>I believe {{ basketball.player }} deserves {{ basketball.salary2 }} <p>



{% endblock content %}

views.py:

from django.shortcuts import render
from django.views.generic import ListView, CreateView, DetailView
from django.contrib.auth.mixins import LoginRequiredMixin

from .models import Basketball

class BasketballListView(LoginRequiredMixin, ListView):
    model = Basketball


class BasketballDetailView(DetailView):
    model = Basketball

class BasketballCreateView(LoginRequiredMixin, CreateView):
    model = Basketball
    fields = [
    'player',
    'salary1',
    'salary2',
    ]

    def form_valid(self, form):
        form.instance.creator =self.request.user
        return super().form_valid(form)

models.py:

from django.db import models
from django.urls import reverse
from django.conf import settings
from django.utils.text import slugify

from autoslug import AutoSlugField
from model_utils.models import TimeStampedModel

from nba_api.stats.static import players

PLAYER_CHOICES = [(i['full_name'], i['full_name']) for i in players.get_active_players()]


class Basketball(TimeStampedModel):
    player = models.CharField(max_length = 50, choices = PLAYER_CHOICES, default = None)
    slug = AutoSlugField("Basketball Player", unique = True, populate_from ="player")
    salary1 = models.DecimalField(decimal_places = 2, max_digits = 15)
    salary2 = models.DecimalField(decimal_places = 2, max_digits = 15)
    creator = models.ForeignKey(settings.AUTH_USER_MODEL,
    null = True,
    on_delete = models.SET_NULL
    )

    def get_absolute_url(self):
        return reverse(
        'basketball:detail', kwargs={'slug': self.slug}
        )

【问题讨论】:

    标签: python django django-3.0


    【解决方案1】:

    我认为在这种情况下UpdateView 可以代替DetailView

    class BasketballUpdateView(UpdateView):
        model = Basketball
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 2021-05-15
      • 2020-08-31
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      相关资源
      最近更新 更多