पर कॉपी करना मैं django के लिए नया हूं, और एक सीखने वाला ऐप के रूप में, मैं एक व्यय लॉगिंग एप्लिकेशन बना रहा हूं।कई मॉडल फ़ील्ड को एक मॉडल उदाहरण से दूसरे
अपने मॉडल में मैं तीन वर्गों है कि इस तरह लग रहे है (मैं उन्हें थोड़ा संक्षिप्तता के लिए सरलीकृत):
class AbstractExpense(models.Model):
description = models.CharField(max_length=100)
amount = models.IntegerField()
category = models.ForeignKey('Category')
tags = models.ManyToManyField('Tag')
insert_date = models.DateTimeField(auto_now=True)
class Meta(object):
abstract = True
class Expense(AbstractExpense):
date = models.DateField('Date')
class RecurringExpense(AbstractExpense):
FREQUENCY_CHOICES = (('D', 'daily'),
('W', 'weekly'),
('M', 'monthly'),
('Y', 'yearly'))
start_date = models.DateField(blank=False)
end_date = models.DateField(blank=True, null=True)
last_check = models.DateField(blank=True, null=True)
frequency = models.CharField(blank=False, max_length=1, choices=FREQUENCY_CHOICES)
RecurringExpense
सिर्फ एक टेम्पलेट है: जब सिस्टम पता चलता है कि समय (एक आवर्ती व्यय सम्मिलित करने के लिए उदाहरण: किराया) इसे टेम्पलेट में जानकारी लेनी चाहिए और उन्हें Expense
कक्षा के नए उदाहरण में कॉपी करना चाहिए। यहाँ काम के आरोप में RecurringExpense
विधि से प्रासंगिक सा है:
Expense(description=self.description,
amount=self.amount,
category=self.category,
# tags=self.tags,
date=expense_date).save()
दोषरहित ऊपर काम करता है, लेकिन अगर मैं tags=self.tags
लाइन uncomment, Django शिकायत करता है और निम्न त्रुटि फेंक:
Exception Type: TypeError
Exception Value: 'tags' is an invalid keyword argument for this function
Exception Location: <snip>/django/db/models/base.py in __init__, line 367
मैं इस समस्या के आसपास काम करने के लिए I could create a loop पता है, लेकिन मुझे आश्चर्य है कि क्या एक और शानदार तरीका है जो मुझे एक ही बार में प्रदर्शन करने की अनुमति देगा ....
आप 'Expense.objects.create (...)' –
के साथ 'व्यय (...) '/'e.save()' को प्रतिस्थापित भी कर सकते हैं यदि आपके पास बड़ी संख्या में टैग हैं (SQL ड्राइवर निर्भर)। इस मामले में आप उन्हें जोड़ने के लिए सभी टैग पर बड़े हिस्से में पुनरावृत्त कर सकते हैं। – odedfos