【问题标题】:Auto-Populate the User Field in Django (no such column)自动填充 Django 中的用户字段(没有这样的列)
【发布时间】:2014-08-15 02:34:04
【问题描述】:

我正在尝试在我的 BucketListItemForm 中自动填充“pub_date”字段。我已经能够使用时间和日期字段执行此操作,但在尝试使用“pub_by”字段执行此操作时不断收到以下错误:

没有这样的列:BucketList_bucketlistitem.pub_by_id

在过去的几天里,我一直在玩我能想到的一切,并查看其他有类似问题的人发布在 StackOverflow 上,但似乎没有任何东西可以解决我的问题。如果您能提供任何帮助,我将不胜感激!

forms.py

class BucketListItemForm(forms.ModelForm):

class Meta:
    model = BucketListItem

模型.py

class BucketListItem(models.Model):
text = models.CharField(max_length = 200)
pub_by = models.ForeignKey(User)
pub_date = models.DateTimeField(editable=False)

def __unicode__(self):
    return self.text

def recently_added(self):
    return self.pub_date >= timezone.now() - datetime.timedelta(days = 1)

recently_added.boolean = True

def save(self):
    if not self.id:
        self.pub_date = timezone.now()
    super(BucketListItem, self).save()

views.py

def index(request):
    all_list_items = BucketListItem.objects.all()
    context = {'all_list_items': all_list_items}
    return render(request, 'BucketList/index.html', context)

def my_list(request):
    personal_list = BucketListItem.objects.filter(pub_by = request.user.username)
    context = {'personal_list': personal_list,
                  'user': request.user.username}
    return render(request, 'BucketList/mylist.html', context)

def create(request):
    if request.POST:
        form = BucketListItemForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/bucketlist/mylist')
    else:
        form = BucketListItemForm()

    args = {}
    args.update(csrf(request))
    args['form'] = form

    return render_to_response('BucketList/create_item.html', args)

admin.py

class BucketListItemAdmin(admin.ModelAdmin):
    fieldsets = [
        ('Text',              {'fields': ['text']}),
    ]
    readonly_fields = ('pub_date',)
    list_display = ['text', 'pub_date', 'pub_by', 'recently_added']
    list_filter = ['pub_date', 'pub_by']
    search_fields = ['text']

def save_model(self, request, obj, form, change):
    if not change:
        obj.user = request.user
    super(self.__class__, self).save_model(request, obj, form, change)

admin.site.register(BucketListItem, BucketListItemAdmin)

mylist.html

{% if user %}

<h1>{{user}}'s Bucket List</h1>
{% if personal_list %}
    <ol>
    {% for item in personal_list %}
        <li>{{ item.text }}</li>
    {% endfor %}
    </ol>
{% else %}
    <p>You don't have any Bucket List items yet!  Better get on that.</p>
{% endif %}

{% else %}
    <p>Sorry, it doesn't seem like you are logged in!</p>
{% endif %}

create_item.html

<form action = "/bucketlist/create/" method = "post">{% csrf_token %}
<ul>
{{form.as_ul}}
</ul>

<input type = "submit" name = "submit" value = "Create BucketListItem">
</form>

【问题讨论】:

    标签: python django forms admin auto-populate


    【解决方案1】:

    您似乎在更新代码后忘记同步数据库。尝试删除您正在使用的数据库(或删除它)并再次运行syncdb。如果您发布完整的代码,即带有表单的 html 文件,如果这不起作用,我可以进一步帮助您。

    【讨论】:

    • 非常感谢您的回答!我听从了您的建议,现在一切正常,除了上面错误消息中所述的 mylist 视图:int() 以 10 为基数的无效文字:'Mike'('Mike' 是我当前登录的帐户)
    • 除此之外,“create”视图会为“pub_by”字段生成一个下拉列表,而不是自动将用户名传递给表单。如果您对此也有任何建议,我将不胜感激!
    • Np。很高兴我能帮上忙。您必须更改表单定义才能发生这种情况。您还需要将用户传递给表单或将其排除并在保存表单时添加它。另一个是 python 错误:您试图从string 传递int,而没有整数值。例如int('word')
    • 我把一切都弄清楚了!非常感谢您的帮助。
    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2016-12-22
    • 1970-01-01
    • 2012-05-26
    • 2014-12-26
    • 2021-03-16
    相关资源
    最近更新 更多