小编tro*_*ife的帖子

Django - 不会让我向模型添加新字段,因为 1054,“未知列‘字段列表’”)

我试图按照简单的规则简单地将布尔字段添加到数据库中的模型中:

- add field to model
- python manage.py makemigrations app
- python manage.py migrate app
Run Code Online (Sandbox Code Playgroud)

几乎 99% 的时间都有效。因此,在第二步(makemigrations)中,当我的模型中新添加的字段即将运行时,我收到一个错误:

django.db.utils.OperationalError: (1054, "Unknown column 'model.field' in 'field list'")
Run Code Online (Sandbox Code Playgroud)

出色的。它不允许我通过添加新字段来进行迁移......因为它找不到我要新添加的字段......非常有道理!

不管怎样,我已经删除了所有的迁移,删除了我的新字段,再次进行迁移,迁移......一切都很好 - 所以现在我只有 1 个迁移文件(0001)......

按照与上述相同的步骤操作...错误

我在这里错过了一些可笑的事情吗?我的意思是,向模型添加字段非常简单,我可能已经这样做了 1000 次。姜戈为什么这么取笑我

编辑: 回答:

好的,我已经做到了。

删除迁移文件、截断迁移表并使用 0001_initial.py 迁移后,我制作了一个空的迁移文件(python manage.py makemigrations --empty app)并手动添加了该字段......然后我迁移并且它起作用了!说实话,对此感到困惑,但至少已经做出了改变:

  • 删除所有迁移文件
  • 截断 django_migrations 表
  • 注释新的布尔字段
  • 运行 python manage.py makemigrations
  • 运行 python manage.py migrate --fake
  • 运行 python manage.py makemigrations --empty app
  • 在操作中手动将字段添加到空迁移文件中:

    migrations.AddField('modelName', 'fieldName', models.BooleanField(default=False)),
    
    Run Code Online (Sandbox Code Playgroud)
  • 运行 python manage.py migrate

  • 取消注释新的布尔字段,使其代表您在迁移操作中所做的操作

django

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

按分割字符串 django orm 排序

我有一个 ID 作为参考号和年份,格式如下:

1/17
98/15
2/17
112/17
2345/17
67/17
9/17
8974/16
Run Code Online (Sandbox Code Playgroud)

当我使用 django orm 获取我的 ID 时:

obj = MyIDs.objects.filter(run='run_1').order_by('ID')
Run Code Online (Sandbox Code Playgroud)

我按照第一个数字的顺序将它们取出:

1/17
112/17
2/17
2345/17
67/17
8974/16
9/17
98/15
Run Code Online (Sandbox Code Playgroud)

然而,由于 / 后面的数字是年份,我想按年份然后数字对它们进行排序。我可以在 mySQL 中轻松执行此操作(使用子字符串索引等),如果它是一个 python 列表,但由于我现在不想在将对象发送到我的 html 模板之前处理它们 - 有没有办法做到这一点在奥姆?

python mysql django orm

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

为什么这个django形式无效?

为什么这个表格没有验证?它甚至没有调用该clean()方法.

forms.py:

class SingleSampleForm(forms.Form):

    sample_id = forms.CharField(label='Sample ID:')

    class Meta:
        fields = ('sample_id',)

    def __init__(self, *args, **kwargs):
        super(SingleSampleForm, self).__init__()

        self.helper = FormHelper()
        self.helper.layout = Layout(
            Field('sample_id',
            css_class="search-form-label",),
            Submit('submit', 'Search sample', css_class='upload-btn')
        )

        self.helper.form_method = 'POST'


    def clean(self):
        print('CLEAN')
        sample_id = self.cleaned_data['sample_id']
        if sample_id:
            return sample_id
        raise ValidationError('This field is required')
Run Code Online (Sandbox Code Playgroud)

views.py:

class SampleView(View):

    sample_form = SingleSampleForm

    def get(self, request, *args, **kwargs):

        sample_form = self.sample_form()

        self.context = {'sample_form': sample_form,}

        return render(request,
                    'results/single_sample_search.html',
                    self.context)


    def post(self, request, *args, **kwargs):

        self.sample_form …
Run Code Online (Sandbox Code Playgroud)

python forms django

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

Django 表 2 - 如何更改正在显示的模型的查询集?

我正在尝试使用 django-tables2 在表中发出 get 请求后显示所有模型对象。它当前显示所有内容,但我无法弄清楚如何根据我的视图中的模型 pk 过滤查询集:

视图.py

class ViewJob(LoginRequiredMixin, SingleTableView):
    model = JobResults
    table_class = JobResultsTable

    template_name = 'app/viewjobresults.html'
    paginator_class = LazyPaginator
    table_pagination = {"per_page": 30}

    def get_context_data(self, **kwargs):
        """ ViewJob get_context_data request """
        context = super(ViewJob, self).get_context_data(**kwargs)

        print("ViewJob >get_context_data()")

        context['job_obj'] = Job.objects.get(pk=self.kwargs.get('pk'))

        # context['object_list'] = context['object_list'].filter(job_id=context['job_obj'].id)

        return context
Run Code Online (Sandbox Code Playgroud)

模板 - app/viewjobresults.html

{% extends "base.html" %}
{% load render_table from django_tables2 %}

    {% render_table table %}

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

表.py

class JobResultsTable(tables.Table):

    job = tables.Column(
        accessor='job_id.job_name',
        verbose_name='Job')

    results = …
Run Code Online (Sandbox Code Playgroud)

python django django-tables2

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

自定义 Django UserCreationForm 以便我根据姓氏和名字创建用户名,而不是用户输入的用户名?

我想修改我的 UserCreationForm,以便当用户请求注册我的网站时,他们会得到一个用户名:last_name+'.'+first_name。

我的 Django forms.py:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class SignUpForm(UserCreationForm):
    first_name = forms.CharField(max_length=30, required=False)
    last_name = forms.CharField(max_length=30, required=False)
    email = forms.EmailField(max_length=254)


    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email', 'password1', 'password2', )
        exclude = ['username', ]
Run Code Online (Sandbox Code Playgroud)

所以我从实际表单中排除了用户名:

<h2>Sign up</h2>
<form method="post">
 {% csrf_token %}
 {% for field in form %}
   <p>
     {{ field.label_tag }}<br>
     {{ field }}
     {% if field.help_text %}
       <small style="color: grey">{{ field.help_text }}</small>
     {% endif %} …
Run Code Online (Sandbox Code Playgroud)

python forms authentication django

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

标签 统计

django ×5

python ×4

forms ×2

authentication ×1

django-tables2 ×1

mysql ×1

orm ×1