我试图按照简单的规则简单地将布尔字段添加到数据库中的模型中:
- 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)并手动添加了该字段......然后我迁移并且它起作用了!说实话,对此感到困惑,但至少已经做出了改变:
在操作中手动将字段添加到空迁移文件中:
migrations.AddField('modelName', 'fieldName', models.BooleanField(default=False)),
Run Code Online (Sandbox Code Playgroud)运行 python manage.py migrate
我有一个 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 模板之前处理它们 - 有没有办法做到这一点在奥姆?
为什么这个表格没有验证?它甚至没有调用该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) 我正在尝试使用 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) 我想修改我的 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)