[英]Updating a Django Model from DetailView
我有一個 Django model 從用戶 1 使用 CreateView 創建的表單中接收大部分變量值。 用戶 1 創建一個 object 並選擇大多數字段值。
創建 object 后,將其發布到牆上,另一個用戶(用戶 2)可以訪問 object 並為最終未填充的字段添加信息。 我的問題是,如何在 DetailView html 表單中允許此功能? 在下面的代碼中,“basketball.salary2”是用戶 2 將在 DetailView 中輸入和發布的先前空字段。 所有其他值都已填寫並顯示在 HTML 中。
籃球細節.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 %}
視圖.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)
模型.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}
)
我認為對於這種情況UpdateView
將代替DetailView
工作。
class BasketballUpdateView(UpdateView):
model = Basketball
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.