Django:基于外键过滤器编辑多个现有模型条目

时间:2018-05-16 13:26:09

标签: django django-models django-templates django-views

我根据Myfirstapp教程的初始设置尝试了一些事情。 https://docs.djangoproject.com/en/2.0/intro/tutorial01/

我从其他答案中尝试了许多不同的方法,但我收到错误或空白页面。所以会问一个干净的问题。

我有以下models.py

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    def __str__(self):
        return self.question_text
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

以下urls.py

from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('<int:pk>/editchoices/', views.ChoiceEditView.as_view(), name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
]

我可以通过网址

显示与问题相关的所有choice_texts(和投票)
path('<int:pk>/', views.DetailView.as_view(), name='detail'),

并查看

class DetailView(generic.DetailView):
    model = Question
    template_name = 'polls/detail.html'

与模板结合使用

<h1>{{ question.question_text }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
  <input type="file" name="csv" accept="csv/*"/><br />
{% for choice in question.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>

我现在想要创建一个页面(表单,视图和模板页面),它为我提供与问题相关的所有choice_texts选项(基于url中的pk),以便编辑多个choice_texts(并保存)和可以添加1或2个选项。我已经为modelformset等尝试了很多代码示例,但无法让它们工作。我已经在其他视图中使用LoginRequiredMixin和@login_required将此功能限制为仅限注册用户(一旦我开始工作),但不想使用管理部分。

使用Django 2.0.4版

我尝试过以下forms.py

class ChoiceForm(ModelForm):
    class Meta:
        model = Choice
        exclude = ('')

EditChoicesFormset = modelformset_factory(Choice, fields = ['choice_text'], exclude = [], can_delete = True, extra=1)

0 个答案:

没有答案