【问题标题】:Django: Set kwargs value for excluded field in generic viewDjango:在通用视图中为排除字段设置 kwargs 值
【发布时间】:2017-10-25 17:59:08
【问题描述】:

嗨,我从昨天开始就在尝试。

models.py

class Event(models.Model):
    def get_absolute_url(self):
        return reverse('events:event-detail', kwargs={'pk': self.pk})

class Kategorie(models.Model):
    event = models.ForeignKey(Event)
    sport = models.ForeignKey(Sport)
    ....

urls.py

url(r'^kategorie/(?P<pk>[0-9]+)/create/$', views.KategorieCreate.as_view(), name='kategorie-create'),

html

<a href="{% url 'events:kategorie-create' event.id %}">Neue Kategorie</a>

views.py

class KategorieCreate(generic.CreateView):
    model = Kategorie
    fields = ['sport',...]       # 'event' is excluded
    template_name_suffix  = '_create_form'

    def get_context_data(self, **kwargs):
        context = super(KategorieCreate, self).get_context_data(**kwargs)
        context['event'] = kwargs.get(self.pk)
        return context

我收到了:

NOT NULL 约束失败:events_kategorie.event_id

【问题讨论】:

  • 能否请您发布完整的错误回溯?
  • 已经与罗斯曼的回应合作。试图通过 将外键值“事件”设置为 KategorieForm..

标签: django django-generic-views keyword-argument create-view


【解决方案1】:

在上下文中设置该值没有意义;您需要在表单实例中这样做。这是well documented

def form_valid(self, form):
    form.instance.event_id = self.kwargs['pk']
    return super(KategorieCreate, self).form_valid(form)

请注意,我实际上无法理解您要在其中插入什么值。使用类别 PK 作为事件的 id 是没有意义的。

【讨论】:

  • 我尝试了这么多 form_valid、get_response、init、save,......总是没有价值或空 kwargs。我想我有“form.event = self.kwargs.get('pk')。我想设置我从字段中排除的事件。我更新了我的问题,希望它变得更清楚。
  • 这并没有真正帮助。我的回答有什么问题?
猜你喜欢
  • 2021-08-14
  • 2011-08-20
  • 2011-10-07
  • 1970-01-01
  • 2021-08-04
  • 2015-11-03
  • 1970-01-01
  • 2014-03-06
相关资源
最近更新 更多