首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django和MySQL --两者之间的数据是不同的

问Django和MySQL --两者之间的数据是不同的
EN

Stack Overflow用户
提问于 2012-01-26 21:21:51
回答 1查看 240关注 0票数 0

我有一个Django应用程序,它使用MySQL作为后端。当原始MySQL记录显示一个值时,我遇到了困难,但是Django在web应用程序中提供了其他一些东西。

例如,我有一个客户端数据表。每个记录中的一个字段称为snailMailInvoice,是Y/N选项--默认为Y (varchar类型)。

代码语言:javascript
复制
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| snailMailInvoice  | varchar(3)   | NO   |     | Y       |                |

原始MySQL:

代码语言:javascript
复制
select * from systems_system_contact where lastName="SomeClient";
...a bunch of other fields... | snailMailInvoice |
...a bunch of other fields... | N

然后,在Django应用程序中,表单显示Y (另一个选项)。这就像Django应用程序看不到MySQL值一样,因此它默认为Y。如果通过Django应用程序选择N并保存表单,那么在Django中的值将坚持到N。

为什么会发生这种事?

编辑-添加一些代码

Forms.py:

代码语言:javascript
复制
class System_Contact_Form(ModelForm):
    class Meta:
        model = System_Contact
        exclude = ('isMainContact', 'systemOwner', 'companyName', 'isRessyContact')

Views.py:

代码语言:javascript
复制
def contact_details(request, scID):
    redirect_to = request.REQUEST.get('next', '/systems/contacts/')
    if request.method == 'POST':
        syscontEdit = System_Contact.objects.get(pk=scID)
        form = System_Contact_Form(request.POST, instance=syscontEdit)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect(redirect_to)
    else:
        syscontView = System_Contact.objects.get(pk=scID)
        form = System_Contact_Form(instance=syscontView)

    c = {
        'form':form,
        'cancel':redirect_to
        }

    return render_to_response('pages/systems/contact_details.html', c, context_instance=RequestContext(request))

Models.py:

代码语言:javascript
复制
class System_Contact(models.Model):
IS_MAIN_CONTACT_CHOICES = (
    ('Y', 'Yes'),
    ('N', 'No'),
)

IS_SYSTEM_OWNER_CHOICES = (
    ('Y', 'Yes'),
    ('N', 'No'),
)

IS_RESSY_CONTACT_CHOICES = (
    ('Y', 'Yes'),
    ('N', 'No, this is a commercial contact'),
)

TRADE_CHOICES = (
    ('EL', 'Electrician'),
    ('LA', 'Landscaper'),
    ('PL', 'Plumber'),
    ('TR', 'Trencher'),
)

SNAIL_MAIL_CHOICES = (
    ('Y', 'Yes'),
    ('N', 'No'),
)

SNAIL_MAIL_INVOICE_CHOICES = (
    ('Y', 'Yes'),
    ('N', 'No'),
)


firstInitial = models.CharField(max_length = 10, verbose_name = 'First Initial', blank = True, null = True)
firstName = models.CharField(max_length = 60, verbose_name = 'First Name', blank = True, null = True)
lastName = models.CharField(max_length = 160, verbose_name = 'Last Name', blank = True, null = True)
phonetically = models.CharField(max_length = 100, verbose_name = 'Phonetically', blank = True, null = True)
companyName = models.CharField (max_length = 160, verbose_name = 'Company Name', blank = True, null = True) #Only used for Commercial Owners, no other field needed
homePhone = models.CharField(max_length = 60, verbose_name = 'Home Phone Number', blank = True, null = True)
officePhone = models.CharField(max_length = 60, verbose_name = 'Office Phone Number', blank = True, null = True)
cellPhone = models.CharField(max_length = 60, verbose_name = 'Cell Phone Number', blank = True, null = True)
faxNumber = models.CharField (max_length= 60, blank=True, null=True, verbose_name = 'Fax Number')
isMainContact = models.CharField (max_length = 3, verbose_name = 'Is the Main Contact?', choices = IS_MAIN_CONTACT_CHOICES, default='N')
isRessyContact = models.CharField (max_length = 3, verbose_name = 'Is this a Ressy Contact?', choices = IS_RESSY_CONTACT_CHOICES, default='Y')
isArchived = models.BooleanField(verbose_name = 'Archived?', default = False)
systemOwner = models.CharField (max_length = 3, verbose_name = 'Is a System Owner?', choices = IS_SYSTEM_OWNER_CHOICES, default='N')  #this is just a flag to say they own a system
worksFor = models.CharField (max_length = 70, verbose_name = 'Works For', blank = True, null = True)
tradeType = models.ForeignKey(Contact_Trade, blank=True, null=True, verbose_name='Trade')
emailAddress = models.EmailField(verbose_name = 'Email Address', blank = True, null = True)

billingAddress = models.CharField(max_length = 150, verbose_name = 'Billing Address', blank=True, null=True )
billingCity = models.CharField(max_length = 90, verbose_name = 'Billing City', blank=True, null=True)
billingProvince = models.CharField(max_length = 30, verbose_name = 'Billing Province', blank=True, null=True)
billingPostalCode = models.CharField(max_length = 10, verbose_name = 'Billing Postal Code', blank=True, null=True)
snailMailOnly = models.CharField(max_length = 3, verbose_name = 'Snail Mail Only?', choices = SNAIL_MAIL_CHOICES, default='Y')
snailMailInvoice = models.CharField(max_length = 3, verbose_name = 'Snail Mail Invoice?', choices = SNAIL_MAIL_INVOICE_CHOICES, default='Y')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-27 03:53:52

好吧--我想出来了。

我意识到,在我的CSV文件中,snailMailInvoice字段是每行的最后一个字段。因此,在线的末尾有一个回车。我假设这是一个\n --因此,在导入CSV的MySQL命令中,我声明了terminated by '\n'。

但是,MySQL在每一行上都取了一个'\r‘,并将其添加到snailMailInvoice字段中。因此,每个记录都有一个Y或带有一个\r的N。

我将我的MySQL导入语句修改为:lines terminated with '\r\n'现在一切都如预期的那样正常工作。

学到的教训。

谢谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9025530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档