标签: inline-formset

Django内联Formset问题(列表超出范围)

这应该很简单,我实际上已经在昨天工作了.我不知道发生了什么变化,但它现在抛出一个错误.

def game_design(request):
    user=User.objects.get(pk=request.user.id)
    organization=user.organization_set.all()[0]
    website=organization.website_set.all()[0]
    surveys=website.survey_set.all()
    error=''
    SurveyFormSet=inlineformset_factory(Website, Survey, extra=0, can_delete=True)
    NavigationFormSet=modelformset_factory(Navigation, extra=1)
    if request.method=='POST':
        survey_formset=SurveyFormSet(request.POST, request.FILES, prefix="surveys")
        navigation_formset=NavigationFormSet(request.POST, request.FILES, prefix="navigations")
        if survey_formset.is_valid() and navigation_formset.is_valid():
                survey_formset.save()
            navigation_formset.save()
            return HttpResponseRedirect("/rewards/")
        else:   
            error="Please fix your errors"
           survey_formset=SurveyFormSet(request.POST, request.FILES,prefix="surveys")
           navigation_formset=NavigationFormSet(request.POST, request.FILES,prefix="navigations")
           return render_to_response('website/game_design.html', {'website':website,'survey_formset':survey_formset, 'navigation_formset':navigation_formset, 'error':error}, context_instance=RequestContext(request))
    else:
         survey_formset=SurveyFormSet(instance=website,prefix="surveys")
         navigation_formset=NavigationFormSet(queryset=Navigation.objects.none(),prefix="navigations")
    return render_to_response("website/game_design.html", {'website':website,'survey_formset':survey_formset,'navigation_formset':navigation_formset,'error':error},context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

感谢您对此提供任何帮助

django inline-formset

1
推荐指数
1
解决办法
1244
查看次数

Django 内联表单集错误

我正在尝试向表单添加内联表单集。这是重现错误的最少代码:

模型.py

class Festival(Model):
    desc = TextField(max_length=1000)

class FestivalAddress(Model):
    festival = ForeignKey(Festival, related_name="addresses")
    name = CharField(max_length="50")
Run Code Online (Sandbox Code Playgroud)

网址.py

urlpatterns = patterns('',
    url('^add/$', FestivalCreateView.as_view(), name='festival_add'), 
)
Run Code Online (Sandbox Code Playgroud)

视图.py

class FestivalCreateView(CreateView):
    model = Festival
    form_class = FestivalForm

    #Add FestivalAddressFormset to context here
Run Code Online (Sandbox Code Playgroud)

表格.py

class FestivalAddressForm(ModelForm):
    class Meta:
        model = FestivalAddress

class FestivalForm(ModelForm):
    class Meta:
        model = Festival

FestivalAddressFormSet = inlineformset_factory(FestivalForm, FestivalAddress, form=FestivalAddressForm, extra=2)
Run Code Online (Sandbox Code Playgroud)

这会抛出 AttributeError: 'ModelFormOptions' object has no attribute 'get_parent_list'。我有点困惑,因为我正在遵循SO 上给出的解决方案。

编辑:我删除了 FestivalCreateView 对表单集的使用,因为无论有没有它都会发生错误。

django django-forms inline-formset

1
推荐指数
1
解决办法
5173
查看次数

在formset中访问特定表单而不对索引进行硬编码

有没有办法从模板中的内联formset访问特定表单,而无需对索引进行硬编码?我知道迭代一个formset的通常方法是做类似的事情:

{% for form in formset %}
    {{ form }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但是由于模板上的一些细节(我有多个表单集,应该在表格上并排显示在另一个表格内for),如果我可以通过索引访问每个表单会更好.我可以通过硬编码索引来做到这一点{{ formset.0 }},但是因为我在模板中迭代,理想的是通过forloop.counter获取表单,这样我就可以做类似的事情了

{% for field in fields %}
<tr>
    <td>{{ field }}</td>
    <td>{{ formset1.[forloop.counter0] }}</td>
    <td>{{ formset2.[forloop.counter0] }}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

有办法实现这个吗?

django formset inline-formset

1
推荐指数
1
解决办法
953
查看次数

使用createview和modelform在django中自动将登录用户设置为作者

我正在构建一个前端表单,该表单允许某人无需访问管理员即可发布文章。

用户登录后,我希望他/她能够写一篇文章。保存后,我希望将该用户自动设置为文章的作者。

我陷入僵局。任何帮助将非常感激。

models.py

from django.db import models

from django.urls import reverse
from django.contrib.auth.models import User
from django.utils import timezone



class Article(models.Model):
    author = models.ForeignKey(User)
    title = models.CharField(max_length=65)
    text = HTMLField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title


class ArticleImage(models.Model):
    image = CloudinaryField('image')
    image_name = models.CharField(max_length=55,
                                    default='')
    article = models.ForeignKey(Article)

    def __str__(self):
        return self.image_name


class ArticleTag(models.Model):
    slug = models.SlugField(max_length=50,
                            unique=True)
    article = models.ForeignKey(Article)

    def __str__(self):
        return self.slug


class ArticleCategory(models.Model):
    slug …
Run Code Online (Sandbox Code Playgroud)

python django modelform inline-formset django-class-based-views

1
推荐指数
1
解决办法
2436
查看次数

Django:AttributeError:视图对象没有属性“kwargs”

我正在构建一个视图,我正在从 url 传递一个 uuid。但是,当我尝试访问 kwarg 时,出现"AttributeError: view object has no attribute 'kwargs'"错误。

在我的模板中,我传递了一个 UUID:

create/97261b96-23b8-4915-8da3-a90b7a0bdc8e/
Run Code Online (Sandbox Code Playgroud)

网址:

re_path(
    r"^create/(?P<uuid>[-\w]+)/$",
    views.DetailCreateView.as_view(),
    name="detail_create"),
Run Code Online (Sandbox Code Playgroud)

风景:

class DetailCreateView(SetHeadlineMixin, LoginRequiredMixin, InlineFormSetView):
    inline_model = Detail
    headline = "Create a Detail"
    form_class = DetailForm
    success_message = "Detail Added"
    template_name = "details/detail_create.html"

    def get_object(self, **kwargs):
        return Post.objects.get_subclass(uuid=self.kwargs.get('uuid'))

    def __init__(self, *args, **kwargs):
        super(DetailCreateView, self).__init__(*args, **kwargs)
        self.object = self.get_object()
        self.model = self.object.__class__()
Run Code Online (Sandbox Code Playgroud)

关于正在发生的事情的背景——

  • Post 是一个模型,它是其他模型(产品和变体)继承的InheritanceManager
  • 两种模型产品和变体都有很多细节。
  • 创建 Detail 后,我会将其添加到 Product 对象或 Variation 对象。
  • 为了为 InlineFormSetView 设置模型,我尝试使用 UUID …

django formset inline-formset

1
推荐指数
1
解决办法
1382
查看次数