我真的很茫然,因爲這根本沒有意義。我打電話保存/創建一個對象,並且它不會顯示在管理站點中。我甚至使用SQLite Viewer程序檢查了SQLite數據庫,該程序再次顯示該項目未被保存。即使在「保存」調用後,Django對象也不會保存
這是節省了Data
對象的代碼:
data = Data(represents=field, for_entry=entry, value="This can be anything")
# field is a DataField db object and entry is a Entry db object (see model below and paragraph)
print("B4", data) #<---- Shows that Data has not been assigned an ID/pk
data.save()
print("8ER: ", data) #<--- Shows that Data has been assigned an ID/pk
你可以從我的意見看,我知道的數據對象的save
調用,我想意思是以後分配一個ID有效。沒有任何錯誤拋出。 field
和entry
都是。每個人似乎都沒問題,因爲他們有正確的ID,用[table name].objects.get(id=...)
進行檢索,我可以保存/編輯它們,並保存更改。
即使陌生,在這個功能確切的代碼被稱爲右側前這一個工程。
這是我model.py(我拿出了一些功能,使其更短):
class Entry(models.Model):
parent = models.ForeignKey('Entry', blank = True, null = True, default=None) # The entry this subs. Is left blank for top level entries.
id_number = models.CharField(max_length=20)
visible = models.BooleanField()
data_field = models.ForeignKey('DataField', default=1) # The field that this entire entry falls under. REDUNDANT BUT NECISSARY
def __str__(self):
return str(self.id)+ "-" + str(self.id_number)
class DataField(models.Model):
parent = models.ForeignKey('DataField', related_name='parent field', null=True, blank=True, default=1)
order = models.IntegerField()
multiple_entries = models.BooleanField(default=True)
DATA_TYPES = (('t', 'Text'), ('d', 'Date'), ('l', 'List'), ('o', 'Option'), ('b', 'Boolean'), ('f', 'Foreign Key'), ('r', 'Root'), ('bb', 'Branch'), ('i', 'Image'), ('ff', 'File'), ('h', 'Holder'), ('bt', 'Big Text')) # A number means it is a foreign key. Should go off title.
foreign_source = models.ForeignKey('DataField', null=True, blank=True) # Points to DATA FIELD WHO'S MATCHING DATA WILL MAKE UP THE OPTIONS
data_type = models.CharField(max_length=2, choices=DATA_TYPES, default='t', null=True, blank=True)
title = models.CharField(max_length=100, null=True, blank=True)
visibility = models.BooleanField(default=False)
def __str__(self):
return str(self.id) + "-" + str(self.title)
def __eq__(self, other):
if not isinstance(other, DataField):
return False
if self.data_type == 'h':
return self.title == other.title
return self.id == other.id
class Data(models.Model):
represents = models.ForeignKey('DataField')
for_entry = models.ForeignKey('Entry', null=True)
value = models.CharField(max_length=1000000)
def __str__(self):
return self.represents.title + "-" + str(self.for_entry.id) + "-" + str(self.value) + "-" + str(self.id)
這可能是我缺少明顯的東西,或者也許你需要的方式更多的信息比我能提供要解決這個問題。如果沒有足夠的信息,請發表評論並請求更多信息,或只列出可能發生的問題。
AUTOCOMMIT被偶然設置爲false,而另一個函數正在執行顯式提交? – Sid
請提供您正在執行的代碼,即save()方法失敗的代碼片段。如果我們可以看到save()的參數是什麼,會更容易。 – pkacprzak
@pkacprzak不幸的是,他們在節目中的一個完全不同的部分要設置(即與其他幾個部分。因此,可能60多行代碼進行交互)。從我所能做的每個測試中,它們似乎都是DateField和Entry類的有效數據庫對象。最後一個參數(值)可以是一個基本的字符串,但它仍然不起作用。 –