小编Reg*_*ser的帖子

仅更新models.Model中的特定字段

我有一个模特

class Survey(models.Model):
    created_by = models.ForeignKey(User)
    question = models.CharField(max_length=150)
    active = models.NullBooleanField()
    def __unicode__(self):
        return self.question
Run Code Online (Sandbox Code Playgroud)

现在我想只更新active字段.所以我这样做:

survey = get_object_or_404(Survey, created_by=request.user, pk=question_id)
survey.active = True
survey.save(["active"]) 
Run Code Online (Sandbox Code Playgroud)

现在我收到一个错误IntegrityError: PRIMARY KEY must be unique.

我是否正确使用此方法进行更新?

django django-models django-views django-database

76
推荐指数
2
解决办法
8万
查看次数

AttributeError:'...'对象没有属性'***_ set'

我有

class Question(models.Model):
    created_by = models.ForeignKey(User)
    question = models.CharField(max_length=150)
    def __unicode__(self):
        return self.question

class Answer(models.Model):
    rel = models.ForeignKey(Question)
    answer = models.CharField(max_length=150)
    def __unicode__(self):
        return self.answer
Run Code Online (Sandbox Code Playgroud)

如果我这样做

answer1 = "xyz"
tmp = Question.objects.get(pk=1)
tmp.answer_set.create(answer=answer1)
Run Code Online (Sandbox Code Playgroud)

我明白了

AttributeError:'Question'对象没有属性'answer_set'

怎么了?

编辑:

或者我接下来可以做些什么来解决这个问题......还是有其他选择?

更新:

主/ models.py:

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

class LoginForm(forms.Form):
    username = forms.CharField(label='', widget=forms.TextInput(attrs={"placeholder":"Username"}), max_length=200)
    password = forms.CharField(label='', widget=forms.PasswordInput(render_value=False, attrs={"placeholder":"Password"}))


class SurveyForm(forms.Form):
    question = forms.CharField(label='Question', widget=forms.Textarea(attrs={"placeholder":"Type your question", "rows":6, "cols":45}), max_length=150)
    answer1 = forms.CharField(label='Answer 1', …
Run Code Online (Sandbox Code Playgroud)

django django-models django-views

6
推荐指数
2
解决办法
7084
查看次数

Django日志记录:将发件人电子邮件地址从root @ localhost更改为其他内容

在我的settings.py中,我有以下日志配置.如果出现错误,我会收到来自root @ localhost的电子邮件.我的问题是我有几个项目,并希望所有错误消息发送到同一个电子邮件地址.但现在非常讨厌识别错误发生在哪个站点上,所以我想将root @ localhost中的发件人电子邮件地址替换为error@project-site.tld.这可能还是我要创建一些虚拟邮箱?

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'DEBUG',
            'class': 'django.utils.log.AdminEmailHandler'
        },
    'logfile': {
        'class': 'logging.handlers.WatchedFileHandler',
        'filename': '/var/log/django/proj_name.log'
        },
    },
'loggers': {
    'django.request': {
        'handlers': ['mail_admins'],
        'level': 'DEBUG',
        'propagate': True,
        },
    'django': {
        'handlers': ['logfile'],
        'level': 'DEBUG',
        'propagate': False,
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

django logging django-settings django-errors

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

使用来自ForeignKey类的数据预填充表单中的字段

我有一个

class SurveyAnswer(models.Model):
    rel = models.ForeignKey(Survey)
    answer = models.CharField(max_length=150)
    def __unicode__(self):
        return self.answer
Run Code Online (Sandbox Code Playgroud)

现在我想用这个"答案"预先填写表格:

survey = get_object_or_404(Survey, created_by=request.user, pk=question_id)
form_data = {"question": survey.question, "answer1":survey.surveyanswer_set.get(xxx)}
form = SurveyForm(form_data)
Run Code Online (Sandbox Code Playgroud)

我有什么与xxx有关,以便我得到例如与"调查"(ForeignKey)相关的第一个答案.当pk = 1时,我得到绝对数.

更新:

我现在做了

{% for i in survey.surveyanswer_set.all %}
    <p><label>Answer {{ forloop.counter }}:</label> <textarea id="id_answer{{ forloop.counter }}" rows="6" placeholder="Type an answer option" cols="45" name="answer{{ forloop.counter }}">{{ i.answer }}</textarea></p>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

如果有人知道如何在视图中做得更好,请给我一个提示.

更新2:

这在视图中更好一些(但我认为必须有一个更简单的解决方案):

answers_part1 = []
for i in survey.surveyanswer_set.all():
    answers_part1.extend([i.answer])
answers_part2 = ["answer1", "answer2", "answer3", "answer4"]
answers = dict(zip(answers_part2, …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-views

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

如果有重复项,请检查4个字符串

s1,s2,s3,s4有一个字符串作为内容

我想做这样的事情

if one or more is the same s1, s2, s3 or s4:
    print error
else
    print s1, s2, s3, s4
Run Code Online (Sandbox Code Playgroud)

python python-2.7

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