मैं अपने मॉडल परिवर्तनों के इतिहास को बनाए रखने के लिए django-simple-history का उपयोग कर रहा हूं।

मैं प्रस्तावित तरीके से सेवा वस्तु को बदलने वाले उपयोगकर्ता को जोड़ने का प्रयास कर रहा हूं यहां

models.py

class UserTrackMixin(models.Model):

    changed_by = models.ForeignKey(User, null=True, on_delete=models.DO_NOTHING)

    @property
    def _history_user(self):
        return self.changed_by

    @_history_user.setter
    def _history_user(self, value):
        self.changed_by = value

    class Meta:
        abstract = True


class Service(BaseModel, UserTrackMixin):
    name = models.CharField(max_length=200)
    serviceType = models.CharField(max_length=200)

    history = HistoricalRecords()

लेकिन, जब मैं सेवा वस्तु के लिए विशेषता _history_user को उपयोगकर्ता ऑब्जेक्ट असाइन करने का प्रयास कर रहा हूं तो यह नीचे बताए अनुसार त्रुटि देता है।

u1=User.objects.first()
<User: User object (07ab8565-26c7-4bfa-a92e-e12bf924160a)>
s._history_user = u1
s.save()

ValueError: Cannot assign "<User: User object (07ab8565-26c7-4bfa-a92e-e12bf924160a)>": "HistoricalService.history_user" must be a "User" instance.

तब मैंने यह कोशिश की:

s.changed_by = u1
s.save()

इसने भी वही त्रुटि दी।

u1 उपयोगकर्ता उदाहरण है, तो यह त्रुटि क्यों देता है?

0
asad_hussain 7 मार्च 2020, 20:50

2 जवाब

_history_user का उपयोग django-simple-history द्वारा आंतरिक रूप से किया जाता है, आपको इसे कॉल करने की आवश्यकता नहीं है (इसलिए _ फ़ंक्शन के उपसर्ग के रूप में)

इसके बजाय changed_by का प्रयोग करें:

u1 = User.objects.first()
s.changed_by = u1
s.save()
1
Horatiu Jeflea 7 मार्च 2020, 21:50
मैंने पहले यह कोशिश की, वही त्रुटि देता है। s.changed_by=u1 s.save() ValueError: Cannot assign "<User: User object (07ab8565-26c7-4bfa-a92e-e12bf924160a)>": "HistoricalService.history_user" must be a "User" instance.
 – 
asad_hussain
7 मार्च 2020, 22:15

मुद्दा मेरे कोड के साथ था।

मेरे पास सेटिंग फ़ाइल में परिभाषित चर AUTH_USER_MODEL नहीं था जिसके कारण इतिहास 'auth.User' को डिफ़ॉल्ट उपयोगकर्ता के रूप में मानता है जैसा कि यहां देखा जा सकता है जो उपयोगकर्ता मॉडल नहीं है जिसका मैं उपयोग कर रहा हूं जैसा कि मैंने परिभाषित किया है मेरा कस्टम उपयोगकर्ता मॉडल।

इसलिए, मुझे उपयोगकर्ता ट्रैकिंग के लिए उपयोग किए जा रहे उपयोगकर्ता मॉडल का स्पष्ट रूप से उल्लेख करने की आवश्यकता है।

अंतिम कोड:

    @property
    def _history_user(self):
        return self.changed_by

    @_history_user.setter
    def _history_user(self, value):
        self.changed_by = value

    history = HistoricalRecords(user_model=User)
0
asad_hussain 8 मार्च 2020, 14:29