Django芹菜完整性错误列名不唯一
我有一个简单的模型,它的作用类似于rsync配置,用于预先填充芹菜周期性任务的字段。我第一次通过模型创建一个新的rsync配置时,一切都正常,并且正在创建一个新的定期任务,没有任何问题。当我尝试更改某些字段,这些字段将更改任务字段(如任务参数)时,我得到的是IntegrityError列名不是唯一的。我觉得这与model save方法有关,但我不确定如何正确获得它。有人有什么想法吗 模型如下:Django芹菜完整性错误列名不唯一,django,celery,django-celery,Django,Celery,Django Celery,我有一个简单的模型,它的作用类似于rsync配置,用于预先填充芹菜周期性任务的字段。我第一次通过模型创建一个新的rsync配置时,一切都正常,并且正在创建一个新的定期任务,没有任何问题。当我尝试更改某些字段,这些字段将更改任务字段(如任务参数)时,我得到的是IntegrityError列名不是唯一的。我觉得这与model save方法有关,但我不确定如何正确获得它。有人有什么想法吗 模型如下: from django.forms import ModelForm from djcelery.mo
from django.forms import ModelForm
from djcelery.models import IntervalSchedule
from djcelery.models import PeriodicTask, IntervalSchedule
INTERVAL=(
('every=5','period 5 minutes'),
)
class Customer(models.Model):
"""(Customer description)"""
customername = models.CharField(blank=True, max_length=30)
emailaddress = models.EmailField()
phonenumber = models.CharField(blank=True, max_length=10)
class Meta:
verbose_name_plural = "Customer"
def __unicode__(self):
return self.customername
class RsyncConfig(models.Model):
"""(RsyncConfig description)"""
cname = models.ForeignKey(Customer)
rsyncname = models.CharField(blank=True, max_length=255)
interval=models.CharField(max_length=8,choices=INTERVAL)
fromip = models.IPAddressField(blank=True)
source_dir = models.CharField(blank=True, max_length=255)
destination_dir = models.CharField(blank=True, max_length=255)
rsync_args = models.CharField(blank=True, max_length=255)
class Meta:
verbose_name_plural = "Rsync Config"
def __unicode__(self):
return self.cname.customername
这是admin.py表单
from django.contrib import admin
from django import forms
from djcelery.models import PeriodicTask, IntervalSchedule
from newrsync.models import Customer,RsyncConfig
class CustomerAdmin(admin.ModelAdmin):
class Meta:
model = Customer
class RsyncConfigAdminForm(forms.ModelForm):
list_display = ('customername', 'rsyncname','source_dir','destination_dir')
class Meta:
model = RsyncConfig
def __init__(self, *args, **kwargs):
super(RsyncConfigAdminForm,self).__init__(*args, **kwargs)
def save(self, commit=True):
interval = IntervalSchedule.objects.get(every=5,period="minutes")
model = super(RsyncConfigAdminForm, self).save(commit = False)
model.cname = self.cleaned_data['cname']
model.rsyncname = self.cleaned_data['rsyncname']
model.fromip = self.cleaned_data['fromip']
model.source_dir = self.cleaned_data['source_dir']
model.destination_dir = self.cleaned_data['destination_dir']
model.rsync_args = self.cleaned_data['rsync_args']
if commit:
model.save()
PeriodicTask.objects.get_or_create(
interval=interval,
task='apps.mftconfig.tasks.rsync_proc',
args=['rsync',
model.rsync_args,
model.source_dir,
model.destination_dir],
kwargs = {},
name = (model.cname," ",model.rsyncname),
enabled=False
)
return model
class RsyncConfigAdmin(admin.ModelAdmin):
form = RsyncConfigAdminForm
list_display = ('cname', 'rsyncname','source_dir','destination_dir')
admin.site.register(Customer,CustomerAdmin)
admin.site.register(RsyncConfig,RsyncConfigAdmin)
在保存新版本之前,我基本上完成了对象的删除。这并不完美,但至少我绕过了PeriodictTask模型中的独特限制,现在希望它不会在以后咬我的屁股。 如果有人有任何建议,请-
class RsyncConfigAdminForm(forms.ModelForm):
list_display = ('customername','rsyncname','source_dir','destination_dir')
class Meta:
model = RsyncConfig
def __init__(self, *args, **kwargs):
super(RsyncConfigAdminForm,self).__init__(*args, **kwargs)
def save(self, commit=True):
instance = super(RsyncConfigAdminForm, self).save(commit = False)
instance.customername = self.cleaned_data['customername']
instance.rsyncname = self.cleaned_data['rsyncname']
instance.fromip = self.cleaned_data['fromip']
instance.source_dir = self.cleaned_data['source_dir']
instance.destination_dir = self.cleaned_data['destination_dir']
instance.rsync_args = self.cleaned_data['rsync_args']
interval = IntervalSchedule.objects.get(every=5,period="minutes")
p=PeriodicTask.objects.filter(name=instance.rsyncname)
p.delete()
PeriodicTask.objects.get_or_create(
interval=interval,
task='apps.mftconfig.tasks.rsync_proc',
args=['rsync',
instance.rsync_args,
instance.source_dir,
instance.destination_dir],
kwargs = {},
name = (instance.rsyncname),
enabled=True
)
if commit:
instance.save()
return instance
你能0修复save中的缩进,1在django shell中重现问题,并粘贴shell会话+回溯吗?我不知道你在shell中重现这个问题是什么意思。这是一种形式,我不知道如何在没有形式的情况下复制它?试着在没有形式的情况下复制它。请尝试使用RsyncConfigAdminFormdata={…}形式。我没有收到任何错误。我正在将%cpaste与ipython一起使用。当我尝试更改某个值时,会发生此问题。然后IntegrityError列名不是唯一的错误弹出。我们没有水晶球。请发布回溯,并准确描述我尝试更改值时您所做的操作